-
Proxied connections can now handle non ASCII characters like
café
. #1043 by @epugh. Thanks @miguelmesas for opening up the ticket that tipped me off to this. -
p@10
scorer now is smarter to handle non binary judgements. #991 by @david-fisher. Sorry this took so long to get merged! -
RAG style queries are MUCH longer. @miguelmesas opened up which is fixed by #1042 and #1037 by @epugh.
-
Improve the bulk query API to support 1000's of queries. #1037 by @epugh.
-
Small tweaks to the layout of the Search Endpoints to move the Destroy action away from the edit action. Thanks @okkeklein for reporting #900.
- Resetting skipped and can't judge query/doc pairs is fixed. Thanks @pfries for opening #1040. Quite a few other Turbo Drive related navigation issues fixed.
This is a big one! We have broken the tyranny of the web request/response lifecycle by embracing some powerful Rails technologies:
-
ActionCable: We now support two way communication from the backend server to your front end browser via Web Sockets. This lets us notify not just the person who starts a long running process of updates, but also any OTHER user who is interested in a specific topic. For example, if someone uploads a Book with many thousands of judgements, then everyone who is part of that team can see the progress for them selves.
-
ActiveJob: This let's us run background jobs. Historically we only used it for tracking of events (like you visited a Case), however now we are using it for processing large data sets in the background.
-
ActiveStorage: We need to better handle LARGE datasets in Quepid. ActiveStorage lets us build massive export files and store them in the database as a binary until you decide to download the data. Likewise, importing large data files that take time to process is now supported by being able to store them in Quepid.
-
Hotwire: HTML over the Wire lets us render HTML on the backend using our familiar Rails MVC, but magically stream the updates to the front end. This lets us add interactivity without requiring us to build out a Single Page Javascript application.
These changes are going to enable a future for Quepid that let's it scale up signficantly and be a richer environment for measuring relevance and working with search!
Okay, now on to our more detailed list of changes:
-
You can now run your Query Evaluations OUTSIDE of Quepid, and store the scores INSIDE Quepid. This gives you a place to share this information with folks in your team. See the example Python scripting here: https://github.com/o19s/quepid/tree/main/docs/examples/external_eval. We also enhanced the API documentation. #1034 by @epugh.
-
HTML Over the Wire! Now we only load HTML that has changed, which improves page percieved performance. Added new export and import of Books as background jobs with notifications to users over Web Sockets. You then can download the resulting file without waiting for the data processing. Loading aspects of the home page asyncrhonsly so the page loads super fast, and then content renders in as available. #992 by @epugh.
-
Update to Rails 7.1 standards. #1033 by @epugh.
-
Nicer Admin Homepage visual layout. #1031 by @epugh.
-
Revamped performance of the Home page to not recalculate the case summaries if you've already cached them in the browser. Much faster page! #1022 and #1029 by @epugh.
-
New Case Wizard is smarter about existing Search Endpoints pane. #1012 by @epugh.
-
Lots of updates to all the dependencies!
-
Swapping between HTTP and HTTPS end points would cause issues with your Search Endpoint configuration. #1035 by @epugh fixes #1005.
-
We state that judging a query doc pair only requires three jdugements, but didn't actually make that work. #1032 by @epugh and @wrigleyDan fixes #1019 by @wrigleyDan.
-
Fixed utf encoding in mysql for query_doc_pairs. #1017 by @epugh fixes #1013 by @wrigleyDan.
-
Pass basic auth credentials through when you view a specific document or use Quepid as a proxy to your search engine. #1015 by @epugh fixes #1014 by @david-fisher.
- You can delete a user who has existing judgements, and then that messes up the main Books page because their judgements hang around. Now you are warned about this, and you can choose to make their judgements anonymous. (or just Lock their user account). #999 by @epugh.
-
Now have a dropdown for Books similar to Cases that leverages our existing tracking of what books you have viewed. #986 by @epugh.
-
We now run scorers over queries that have no ratings and queries that are ZSR. This lets us have smarter logic about how you want to score those situations. #993 by @epugh.
-
One less query to determine what a user has access to via being an owner or a member of a team while ensuring no duplicate cases/books show up. #982 by @epugh with input from @reid-rigo.
-
Remove extranous faraday logs when running tests. #983 by @epugh with input form @reid-rigo fixes #964.
-
Nicer onboarding using TMDB dataset for Algolia users. #987 by @chuckmeyer.
- Book Importing was broken. Plus now we have nicer formatted error message when you validate a book to import. #989 by @epugh.
-
Looking up Cases for a user is returning duplicates due to missing "distinct" keyword on SQL Query. #980 by @epugh.
-
The "bundle exec thor case:create" is NOW updated to handle SearchEndpoints. #981 by @epugh.
-
Now track an Explanation for a judgement. If a human clicks "I can't rate this" then they are prompted for an optional explanation why. In the near future, LLM powered judgements will communicate a explanation as well! #978 by @epugh.
-
Algolia integration! We have a wonderful contribution from @sumitsarkar that adds Algolia as one of the supported Search engines. #933 by @sumitsarker.
-
Move to using Thor (an existing CLI tool) for loading all our sample data files, and less custom Rake code. #966 by @epugh.
-
Better UX when working with custom search API's and the mapper code. #965 and #963 by @epugh, fixing #959, #960, #961 by @wrigleyDan and #950 by @ErikHatcher.
-
Proxied Search API requests should follow Redirects. #962 by @epugh fixes #958 by @wrigleyDan.
-
Improved performance of checking case access permissions. #955 by @reid-rigo. Thanks Reid!
-
Updated the Jaccard, RBO, and Judge comparison notebooks that ship with Quepid. Introduced more robust testing for them. #956 by @epugh.
-
Improve the Books API. #951 by @epugh.
-
Snapshots used to have "Best Snapshot" option, but it hasn't worked in years, so stripped it out. #948 by @epugh.
-
Scoring logic was all somewhat broken. Add a query, it doesn't rescore. Delete a query, it doesn't rescore. Have a ZSR query, it impacts scoring in a "wonky" way. Then, when you introduce snapshot comparisons, it all gets weirder. We've gone through at a pretty line by line debugger level and fixed the various interaction bugs. #975 by @epugh.
-
Only ship Web Open Font fonts, which simplifies our CSS and set up and eliminates a warning in Firefox console. #techdebt. #974 by @epugh.
-
Fixed some bit rot in handling of Tries in the web UI, and do some polish of UX. #967 by @epugh.
-
Check length of query_text. #952 by @epugh and @mkr.
-
No email provider? No problem! Fixed issue with inviting folks and no email provider setup. #949 by @epugh.
-
SCALING SCALING SCALING. Now possible, though painful still, to run 5000 queries by moving lots of activities to background processing. Thanks to my colleagues on the Cville Slack communities #ruby channel for lots of advice and help. #916 by @epugh.
-
Quepid truncates the document fields in the core display, either via using highlighting to pluck out a section, or just snippeting to 200 characters. However some days you just want to see the entire field! Now you can control this in your field specifciation by prepending the field name with
unabridged:
tag. #946 by @epugh. -
Need to communicate with your users about a new Scorer or upcoming downtime? You can now post Annoucements to your users. #911 by @mkr and #941 by @epugh fixes #848 for @flaxsearch.
-
Snapshots require you to be able to "lookup" the document by id from the search engine. However some search engines like Vectara and the Search API don't support this. Reworked how snapshots work to require you to save the document fields at snapshot creation time in order to power the snapshot comparison UI. This may end up being spread to other search engines as well. #945 and #931 by @epugh.
-
The logs in Quepid are being overwhelmed by the size of the documents. #942 by @reid-rigo cleans this up. Thank you Reid!
-
Stripped out Threshold based alerting on queries, the community never used them. #927 by @epugh.
-
Now tracking when a Book was viewed by a user, which powers the dashboard. #925 by @epugh.
-
Removed the
QUEPID_PROPHET_ANALYTICS
environment variable, as Prophet was never a performance issue. #924 by @epugh. -
Dropped old database columns in the
tries
table that had moved tosearch_endpoints
table. #930 by @epugh.
-
Restore the thor commands for creating an admin user. #922 by @epugh fixes #888 by @vincetrumental.
-
Bug fix for static search endpoint when Quepid is running in a nested host context. #917 by @epugh.
-
We were not export notes and options for a query. #926 by @epugh fixes #923 by @peterdm.
Plus we updated to the latest of Ruby and Ruby gems, Mysql, various NPM packages.
Just in time for the New Year!
A number of changes all wrapped up in one large PR #906 by @epugh. This one is for you @david-fisher ;-).
-
Now when you judge a query doc pair for a Judgement Book we update in the background any associated Cases that have that query. This eliminates the need to manually refresh the ratings for a Case from the Judgement Book! Thanks @david-fisher for the suggestion in #829.
-
Provide an option to allow queries that exist on a Book to be created in the Case if they are missing. The default behavior is to NOT create queries in a Case from the Book. Thanks to @jvia for this suggestion. #871.
-
Band-aid the awkwardness that Cases have Queries/Ratings while Books have QueryDocPairs + Judgements, and that there are attributes on a Query like
information need
,notes
, oroptions
that don't exist on a QueryDocPair. So now we preserve them, which facilitates round tripping better. Upload a Book? Upload a Case? It doesn't matter ;-) Long term we need to merge these two data structures... -
When Books were first added to Quepid, they didn't follow the same permissions/sharing structure that Scores and Cases did. Now you can share a Book with multiple Teams! Fixes #907
-
And as an aside, anyone can edit a custom scorer, not just the Owner of it. #762 suggested by @david-fisher.
-
Restore
thor
based scripts by letting you rundocker compose run app bundle exec thor list
to see all the thor scripts available for interacting with Quepid. #904 by @epugh, reported by @vincetrumental in #888. -
Bump splainer-search to 2.30.7 to pass through basic auth properties to Solr.
We discovered that your custom headers can be very long! Thanks @tiagoshin for the patch to extend the length of custom headers in the database. #903 by @tiagoshin.
7.12.0 introduced a change in splainer-search that breaks searchapi
:-(.
- Rollback splainer changes, but also some polish on the UX for going from the Case judgement screen to the Share with a Team. Also make parsing the csv file for the
static
api more robust. #894
A flurry of changes based on feedback from the community. This is basically a "improve" Quepid release.
- Now show the last run on using friendly times, like "one hour ago". #892 by @epugh.
-
Restored in the homepage and the case listing the "last run on" and "last run by" information. Adding this had been causing performance issues, but hoping we worked this out. #891 by @epugh.
-
Some general fixes to handling static defined search case and search endpoints. #886 by @epugh.
-
Also, the usual upgrades to Rails, Node etc. We are now on Rails 7.1.3, though we still need to update some configuration settings from Rails 7.0 to 7.1.
-
Respect the proxy setting for a search end point in doing a snapshot compare lookup, and in linking to individual docs. #893 by @epugh. Thanks @david-fisher for finding this.
-
We now support custom headers for search apis. Thanks @dacox for the fix in o19s/splainer-search#138.
-
Made more robust the adding of queries for a static CSV case. #889 by @epugh. Thanks to @tiagoshin for identifying the issue.
Want to have custom filters or other variables per query? You can now access a per query #$qOption##
hash of JSON data in your query template. For example, if you are accessing a RAG endpoint, and you are passing in a query and need some query specific document ids, you can now do that!
#883 and #885 by @epugh. Big thanks to @mkr for his work on splainer-search upgrades to support this, and @atarora for masterminding the use of the qOption
in queries.
-
More robust handling of the Static File end point, and better handling of proxied queries that don't return json. #886 by @epugh.
-
On to Rails 7.1.2! #837 by @epugh.
Big feature! Or should I say big refactoring? Meet your new friend "The Search Endpoint". You can now configure a connection to a search engine, maybe one of the classic ones like Solr, OpenSearch, or Elasticsearch, or some new ones like "Static CSV File" or even a "Custom Search API". Once that is configured, then you can reuse that connection over and over. Even better, you can share it with your friends in your Team, similar to how you share Cases and Scorers.
You can say good by to search urls like "http://internal-ecs-m-loadb-1jj589wq3y25-167256740489.us-east-1.elb.amazonaws.com/" and welcome to "Stage Search" ;-). If you change where "Stage Search" is pointing, update it one place and it is used by all the Cases (and Tries) that used it.
-
Search Endpoints refactoring in #788, #850 and #852 by @epugh.
-
Documenting our APIs is started! Thanks to @jvia, we have some basic docs on the Cases api. #824, #838 by @jvia and #808 by @epugh.
- On to Node 20! #837 by @epugh.
You can now export and import Case's and Book's cleanly from one Quepid to another Quepid, with proper error handling. You can also use this to export a Case or Book, make a bunch of changes externally using other tools, and then bring it back in.
Get a dump file named case_25.json
via:
python case_export.py --case_id=25 --root_url=https://app.quepid.com --access_token=YOUR_ACCESS_TOKEN
And bring it back in via:
python case_import.py --case_file=case_25.json --root_url=http://localhost:3000 --access_token=YOUR_ACCESS_TOKEN
More docs and some sample scripts coming soon.
#834 by @epugh.
-
In running the Case --> Book --> Case lifecycle, we found that the automatic creation of Judgements for a Book from Ratings for a Case was creating extra averaged ratings when a Case supports multiple raters. (it's fine if there is only one rater). This was messing up the scores. #827 by @epugh fixes this by making it an Advanced option, and introducing a Edit Book option to delete judgements by specific judge. Thanks @david-fisher for figuring this out.
-
Vectara, a vector search engine is now accesible from Quepid! This is the first non Lucene keyword search engine to be surfaced in Quepid and we're learning a lot. There are some limitations, like you don't get the Explain for the query, and we are focused on surfacing what Vectara calls "Documents" versus "Responses" in the Quepid UI. #826 by @mkr. Also o19s/splainer-search#128 by @mkr.
-
Need to copy the query from the Cases screen? Yes, there is now a little Copy to Clipboard icon. #823 by @epugh fixes implements #823 by @jeffryedvm. Thanks!
-
Some folks, like @jeffryedvm, really want to know the rank of the document when judging it in the Books interface. #822 by @epugh implements request #823 by @jeffryedvm.
-
Want to use the Snapshot capablity to import your case with it's queries with it's documents and all of it's document fields? Now you can! #821 let's you export a snapshot with any recorded document fields. You can also now import them. #821 by @epugh for @mkr.
-
We're finding anonymous ratings in our Books, and it's a pain. #819 lets you remap anonymous ratings and judgements to a specific user. Thanks @david-fisher for identifying the issue.
For folks who have been using Quepid prior to 7.6.0, they will have lots of ratings from the main Cases screen that are anonymous, because we didn't associate a user with the ratings. If you now import those ratings into a Book of Judgements, you will have to rerate them if you chose the "multiple raters" options, because you are different than the anonymous user. We have added on the edit book screen an option to map anonymous ratings to a specific user in both a Book and it's associated Cases to support the migration.
#819 lets you remap anonymous ratings and judgements to a specific user. Thanks @david-fisher for identifying the issue.
We finally have a brand new homepage! Quepid started as a tool for relevancy engineers only, but today we have human judges using Quepid to rate documents, Search Managers who are keeping an eye on the offline metrics, and of course in more complex setups, networking types who configure the connection between Quepid and the Search Engine. In the past, regardless of who you were, we dropped you right into a Case. If you had never created one before, well, you got shoved into the Case creation wizard, whether you wanted it or not. It made for a unpleasant first experience for anyone other than the hard core relevancy engineer.
The new dashboard is an attempt to change that UX. It's just a first cut, and honestly, it probably doesn't quite make anyone perfectly happy. I'm hoping that we can get a lot of good feedback and learn from it. I could imagine in the future that based on what you do, we surface information you care about. For example, a network engineer would want to know that the Quepid can talk to each Search Engine. A Search Manager would be more interested in insights and summary progress information. Human judges want to know "what is my next task to do". So please share feedback!
-
The feedback message after creating an empty book is now smart about if there are related cases or not, and gives better next steps instructions. #796 by @OkkeKlein fixed by #797 by @epugh. Thanks Okke!
-
The Cases listing page shows your cases from oldest to newest. @atarora opened #708 for sortable columns. Implementing this didn't go well, so as an alternative, changed the sorting to be from newest to oldest, taking into account the case update time as well as the last time you viewed a specific case. #795 by @epugh. We may want to redo the entire Cases listing page at some point.... Hopefully this is better @atarora ;-).
-
Reworked the messageing (and error handling) when you attempt to open a case that hasn't been shared with you (or doesn't exist!). We had been showing the "You need to reload Quepid in the HTTPS" type message, when actually it was a "Make sure this case has been shared with you!" situation. Also reduced the amount of error messages in the browser and the server in this situation by being smarter. Thanks @cmorley for surfacing this. #792 by @epugh fixed by #793.
-
Thumb images can use a
prefix_url
, just like regular images. #790 by @OkkeKlein is fixed in #805 by @epugh. -
Using Nginx and have huge documents being snapshotted etc. New configuration suggested by @OkkeKlein allows Nginx to be happy. #804 by @epugh.
-
Drop a link in Slack to team 3, and you see details about case 3;-). #733 by @epugh fixed by #794 by @epugh to only do unfurling for cases.
-
Ace code editor insists on loading two javascript files from specific paths in Quepid. Despite best effort, couldn't change this. So #793 just mounts those javascript where Ace wants it to shut up some very loud error messages in the browser console. If you can't beat'em, join'em.
-
When judging ratings using the Book of Judgements, you could sometimes get a situation where you create a judgement, and then tried to create a new one, hitting a constraint. #809 by @epugh makes this more robust.
-
Guess what? 7 GB out of our 9 GB production database is scores for cases being inserted OVER AND OVER again! The AngularJS app uses event emitting to signal when scoring is completed, this causes extra events to be triggered, causing extra PUT of the case scores. This shouldn't matter as we have logic on the server side. However, due to a bug, that logic doesn't actually work. The unit tests for the front end and the back end each independently validate the logic, it's just when you put them together it doesn't work. This didn't matter for years, but the new Dashboard surfaces scores ;-). Fixed in #807 by @epugh.
- Chased down bug with showing you the previous judgement on the Human Judgement page. #779 by @epugh.
Big overhaul on the human rating side of things. We now roundtrip ratings that you have made from the core Case screen into your Book of Judgements when you populate it. (We are also now tracking who the last person was to rate a doc in the Case screen). You can now also merge ratings from multiple Book's into a new Book, which lets you reuse your judgements in new combinations.
Additionally, to encourage your human judges, a progress screen has been added every 20 judgements showing progress and a leaderboard.
-
#778 by @epugh introduces some "fun" into the rating process ;-).
-
#766 introduced the synthesizing of a Book, and fixes #765, track who rates in the main quepid ui, #763, link from list of books in judgements to the book itself, and #761, Combining books loses judgments but still produces scores.
-
#760 changes Quepid to use floats for ratings and judgements, which opens the door to implicit judgements.
Need to interact with Quepid API's from outside of Quepid? We now support Personal Access Tokens! From your Profile page you can generate your own token and then use that to authenticate against Quepid. For example, you can programatically load a judgement directly into Quepid:
curl -X POST http://localhost:3000/api/books/2/judgements/ -H 'Authorization: Bearer 4a82040bf1b2d255c63833cb59fa9275' -H 'Content-Type: application/json' -d '{
"judgement": {
"query_doc_pair_id": 201
"rating": 1
}
}'
In support of this, we added new API's for judgements and ratings in #757 by @epugh.
-
Exporting Ratings in CSV format was returning the same rating for every single rater, regardless of what they did! Fixed in by @epugh with special help from @grahamwren. I randomly sat next to him on plane flight home and we paired on it ;-).
-
Looking up the wrong info need for a Query Doc Pair! Fixed in #755 by @epugh.
-
Missed a relative path for the tries history visualization. Fixed in #754.
Lots of small things from working with Quepid using templates with OpenSearch. Also, if you haven't used https://github.com/o19s/agent_q, it's been updated to work with Quepid 7.x line. I use it to automate pulling my relevance metrics daily from Quepid cases ;-).
-
Rework how we handle OS/ES templates in Quepid so that you don't need to append
/template
to the url, instead, use the existence of the{"id":"my-template"}
in the query parameters to decide what URL to use. This simplifies life when you are using a mix of templates and not since you don't need to change the url constantly. This was mostly in the Splainer-Search v2.22, v2.22.1, and v2.22.2 releases. https://github.com/o19s/splainer-search/ -
Now, under Explain Query modal, you can see the rendered template query for a specific query! #751 by @epugh.
-
Kind of in the weeds, but early database migrations in Quepid back in Rails 4 days didn't have a version spec. Rails 7 complains about this. #739 fixed by #746 by @epugh.
-
Introduced a new environment variable
QUEPID_CONSIDER_ALL_REQUESTS_LOCAL
that lets you bubble up errors message in a production Rails environment, which is helpful in troubleshooting deployments when you can't see the logs. #750 by @epugh. -
Package Jupyterlite to not require external network calls. #721 by @epugh fixed by #728 by @mkr.
-
A three point custom scorer should support keyboard shortcuts. #738 by @epugh fixed by #752 by @depahelix2021.
-
Missing Documents Modal doesn't work when an ES/OS Query Template is defined. #747 fixed by #753 by @epugh.
-
Populating a book of judgements would blow up. Plus the data model allowed a single user to rate a query/doc pair multiple times, which was icky. #734 fixed by #745 by @epugh.
-
Use relative paths everywhere so when Quepid is behind proxies it works properly. #754 by @epugh.
- When populating a book of judgements, if the title field wasn't
title
, then it wouldn't show up with the correct name. #737 by @epugh fixes this.
- Fixed some additional API paths for use with a nested Quepid context. #736 by @epugh. Follow up to #719.
- Importing Snapshots was a feature from the dawn of Quepid, but @epugh had never used it till now. Originally you had to put into the csv file the id of the Case you want to import into, which is awkward and error prone. Now you can import a snapshot via the Import modal for a Case. #727 by @depahelix2021 fixes #724 by @epugh.
-
OpenSearch and Elasticsearch have a
_source
field that is nested JSON. Turns out we don't support stringifying a JSON object in detailed exports or Snapshots. #732 by @depahelix2021 fixes #730 by @epugh. -
With the logic for matching Quepid TLS to the search engine TLS happening only via frontend logic (introduced in #719), we found the User Experience really rough. #731 by @epugh reworks the UX to be clear about when you need to reload your Quepid.
-
We ship Jupyterlite for data manipulation, but maybe you don't have public network access? #728 by @mkr fixes #721 by @epugh.
-
Cloning a Case loses the advanced settings. #729 by @epugh fixes #725 opened by @jvia. Thanks @jvia for reporting this!
Well, that didn't take long... Wanted to use the "Import Snapshot" function, and discovered that the "Export Snapshot" function was busted.
- We've had the ability to mark a Case as "Public" for a while, but we only supported it for the visualization of tries screen. As a spike, trial allowing public access to /api/cases/CASE_ID.json and /api/cases/CASE_ID/snapshots/SNAPSHOT_ID.json end points. #723 by @epugh.
- Fix Export Snapshot. #722 by @depahelix2021.
-
Interested in Rank Biased Overlap as a more powerful version of the venerable Jaccard metric? We have it now as an example Jupter notebook. Thanks to Tito Sierra at the 2023 US Haystack for introducing me to this metric. Thanks to @mkr for creating the draft notebook.
-
Provide link to Team from Book of Judgements. #718 by @epugh.
-
Lots of fixes and cleanups for nesting Quepid under another domain in #719. Credit to @frankcelia for figuring out that we were too smart by half in letting the Rails app redirect traffic to try and match Quepid TLS to the search engine's TLS. Pulling that out has simplified our logic immensely. #719 by @epugh and @frankcelia.
-
We're now on Jupyterlite 0.1.0 from our relatively old 0.1.0b14, and have a build process that will let us stay up to date with this rapidly evolving project. #709 by @mkr.
Some bigger organizations deploying Quepid want to nest it under another domain, like https://tools.bigcorp.com/quepid instead of the more typical https://quepid.bigcorp.com. @worleydl open a PR to support this eleven months ago, and now we finally have it over the finish line! Just specify the RAILS_RELATIVE_URL_ROOT
for when you want to nest Quepid under another domain. #500 by @worleydl.
-
Custom scorers are sorted by the order from oldest to newest in the modal picker UI. Instead, lets sort them alphabetically. #717 by @epugh fixes #695.
-
teamSvc
unit test was failing a lot, and now has been dealt with... By ignoring the checks. :-(. -
When creating a new Book of judgements, seed the Scorer with the one from the Case you were using. #716 by @epugh fixes #705.
-
Using templates in OpenSearch (and Elasticsearch) clashes with how we display (or hide) the fieldSpec field. #706 by @mkr fixes #699.
-
The "Find Missing Docs" UI doesn't actual work with OpenSearch. #707 by @mkr fixes #700. Nicer help text as well.
-
Generated link to individual OpenSearch (and Elasticsearch) document changed, and didn't render properly. o19s/splainer-search#117 by @mkr fixes #701.
-
Swapping from one Scorer to another Scorer would lose the labels in the popup window. #717 by @epugh fixes #704 and #696 by @epugh. It may also fix #613 by @atarora ;-).
Are you ready to launch a Human Rating Program? Quepid is now finally able to support you and your fellow human judges in gathering explicit ratings on your search results.
Since the dawn of Quepid, we've suffered from an ahem sub optimal rating interface for gathering human judgements.
The rating interface failed most best practices for human rating, including suffering from position bias by listing documents in the order the search engine returned them, only supporting a single rating per query/doc pair, requiring lots of mouse movement and clicking.
All that, and the UI is a combination of features required for a Relevancy Engineer with those of a Human Judge.
It's enough to make you weep.
Just to make life harder, the rating interface requires a live connection to your search engine, which often required additional technical hoops to be jumped by your decidedly untechnical subject matter experts.
However that is no longer the case!
This rating interface features:
- You can have up to three independent ratings for every query/doc pair, opening the door to interesting measurements of rating quality.
- A static dataset for rating that is populated from your live search engine. Now your set of query/doc pairs won't change over time unless you want them to.
- Query/doc pair are randomly sampled, but with a bias in favour of higher positioned results over lower positioned so you can get to meaningful numbers quicker.
- Ability to mark a query/doc pair as "I can't Rate This Document" so we can find edge/confusing cases.
- You control what shows up on the card using the same display configuration as in your typical Quepid case.
- Supports thumbnails and hero images in the card.
- There are Scoring Guidelines for your Raters to understand what the scoring scale means.
To make the life of a Relevancy Engineer better, you can now import your queries and ratings from a Book of Judgments. Indeed you can roundtrip from a Case with query/doc pairs to a Book of judgements, get them rated, and then import then back into your Case.
This work was inspired by the great work that the folks at the Wikimedia Foundation did on Discernatron, their human rating tool.
Quepid is now the big 7.0! There have been 98 PR's since release 6.14.0. We are now running on Rails 7, which is great for opening the door to future improvements and keeping us from accumulating tech debt. This also means we took the opportunity to bump the versions of Redis and MySQL we use, as well as Node, Ruby, and all the other libraries. We're now on a modern infrastructure everywhere except for the Relevance Engineer's UI which is still on AngularJS.
Do back up your data before doing this upgrade! Normally I'm pretty cavalier about updates in Quepid-land, but this changes a lot of things, including the MySQL version from 5.6 to 8.... So please back up your data, and for good measure, use those export options to export your precious ratings that you've collected.
Below are details on some selected PR's.
-
As mentioned above, the human rater interface is a big feature. There are too many PR's and Issues to call them out individually. However, I do want to thank everyone who contributed to that really important feature. You know who you are!
-
Allow a Case to be marked Public to facilitate sharing analytics. Public cases don't require you to log in for certain screens. #595.
-
Jupyter notebook for calculating Jaccard Similarity between Snapshots. #586 by @atarora.
-
Add Reciprocal Rank as a default Scorer. #525 by @david-fisher.
-
Rails 7 Upgrade! This would be enough to move us from Quepid 6 to Quepid 7 by itself. Turned out to be pretty painless upgrade. Most of the work was in #627.
-
We enabled RenovateBot to provide automatic PR's for dependencies. In the past three months we had a flood of dependency updates, which improves our security profile and helps us deal with tech debt by ensuring we aren't falling behind.
-
Refactor to remove manualMaxScore and manualMaxScoreValue from custom scorers as not used. #609.
- Rework the selection of settings for a search engine so that we are smarter about if you pick a TMDB demo server, use great defaults, but if you are picking your own search engine, then we make fewer assumptions about query structure, which reduces the chance the first query will blow up! This was first identified by @macohen as part of querqy/chorus#129. Tracked as #580 by @epugh and fixed in #582,
- Command line tool
thor import:ratings
didn't handle a csv file with a header row. Now filters off the header row. Thanks @wrigleyDan for spotting this problem. #581 by @epugh and fixed in #583.
It's my sister Megan's birthday 🎂, so I figured I would give her a release of Quepid. Happy birthday Megan!
There is so much to celebrate in this release, however I have to call out adding support for OpenSearch, enabling API keys to work with Elasticsearch, and the first release supporting Jupyter notebooks runing in Quepid!
-
Quepid now supports OpenSearch! #319 was opened 18 months ago by @flaxsearch, and contributed to by @DmitryKey. Huge thanks to @mkr for stepping up and adding the support to both
splainer-search
and Quepid in #559. -
Quepid now supports Elastic Cloud and Elasticsearch auth with API Keys! Thanks to the work by @aditya-kanekar in #563 and then extended by @worleydl in #566. @aditya-kanekar also wrote up the docs on https://github.com/o19s/quepid/wiki/Troubleshooting-Elastic-Cloud-and-Quepid for how to set up Elastic Cloud!
-
Jupyter Notebooks In Quepid 🎊. Everyone wants to customize their analytics and have different visualizations, so let's make that easier. Quepid now integrates Jupyterlite, a in browser version of Jupyter. So you can write your notebooks using the Python you know and love, and not have to worry about installing dependencies, as Quepid ships all the typical ones. This is an area that I expect a lot of improvement and change as we get to know how to ship sample analytics as Jupyter notebooks. #544 by @epugh.
-
Our first sample notebook let's you compare the scores of two snapshots using a histogram. Really drives home the "before and after" story of Relevance Tuning. To support this notebook, we needed to preserve the score and if all the docs are rated in the snapshot datastructure. #550 by @epugh.
-
Snapshots now include the total number of results for a query, useful for analytics. Also expose the Quepid API for looking up snapshots in the snapshots modal UI. #553 by @epugh fixes #539 by @renekrie.
-
Curious what version of Quepid you are running? So are the rest of us! Display the Quepid version number in the page footer, #570 by @jzonthemtn is fixed by #576 by @epugh.
-
We've moved away from the "master" terminology to "main" for the default code branch, and updated links for that.
-
Moved to Ruby 3! Ruby 3.1.2 on Bullseye is apparently twice as fast as Ruby 2. These two changes let Quepid run on Apple Silicon. It also lets us simplify our Dockerfile setup for Chromium, which we use for testing our frontend application. Lastly, we ripped out Webpacker (Webpack). Webpacker was added for JS toolingduring our migration to Rails 6, however we never actually used it in our development tooling, and is no longer preferred as part of Rails 7. #558 by @epugh and @mkr.
-
Integrate updating of database schema annotations into build processes. This leverages the
annotations
gem, which we've had for years, but wasn't documented and therefore wasn't being manually run. #555 by @epugh. -
When we first moved to Rails from python, we had various database table constraints that were not enforced. Over the years we've started enforcing them, but never cleaned up the old data, till now! #552 by @epugh. Mostly of interest to folks with a deployment of Quepid back to 2016 ;-).
-
During the Rails 6 migration we found out Redis wasn't critical to running Quepid, and attempted to make it optional. However that turned out to be confusing, and future features will require Redis. So let's put it back in our default production docker compose setup. #557 by first time contributor @OkkeKlein. Thanks!
-
Number of results to show is not preserved when cloning a case. #578 by @epugh fixes #565 submitted by @MassimilianoUngheretti-TomTom.
-
Occasionally the Case snapshot isn't successful and there is no snapshot status information displayed to the user. #569 by @atarora fixes #568, also by @atarora.
-
The Snapshot Comparison Jupyter notebook doesn't show the number of results found. #571 fixes #572, both by @atarora.
-
If your
TC_URL
isn't defined, then that causes Quepid to blow up. #573 by @jzonthemtn is fixed by #575 by @epugh. -
docker-compose.prod.yml
is out of date and needs Redis and Nginx. #557 by @OkkeKlein fixes #554. -
Changing Search Engines doesn't reset the api_method, so you could have ES attmepting to use JSONP, which is Solr specific. #560 opened by @epugh fixed by #559 by @mkr and @epugh.
- "Show Only Rated" feature in Quepid busted for ES. Highlighting on _id after a terms match in ES causes a index out of bounds exception. Also, the API method in explainOther needed to have the right case, might make a constants file at some point. o19s/splainer-search#109 by @worleydl fixed the issue in Splainer. Bumped in Quepid via #547 by @epugh.
-
Search box (to find queries). #506 and #512 by @epugh fixes #493 by @theaaronposc. Thanks Aaron!
-
You can now generate a new Case through the
thor
command line tools, useful when setting up lots of cases or as part of a script. #533 by @epugh. -
Surface how many unrated documents you have for a query as an alert bubble. #532 by @epugh.
-
The Frog Pond Report tells you about the state of your ratings. Understand the distribution of queries that need ratings and decide if you need to "hop to it" ;-). #526 by @epugh.
-
Create missing queries when importing ratings. #509 by @epugh.
-
Gray out Queries with no ratings. Previously they showed up as Red with a 0.0 score, the same as if everything had bad ratings! #516 by @worleydl and suggested by @renekrie.
-
Keycloak Version 17 changed the default url to not have the
/auth
in the namespaces. #536 by @epugh fixes #528. We now test Quepid with Keycloak 18. -
Average Precision Scorer AP@10 wasn't implemented following the most common definition of AP. #535 by @david-fisher fixes this! Thanks David!
-
Taking a Snapshot is intensive process that makes a unique query to the search engine. #513 by @epugh provides nicer error message.
-
Remove some more unused AngularJS code. #529 by @epugh.
-
'Information need' import doesn't works for an empty case. #508 by @epugh fixes #507 by @atarora.
-
Bump to latest Rails to pick up CVE fixes, Ruby 2.7.6 recommended by Heroku, Bundler 2.3.18, plus general updates to gem dependencies.
-
The detailed export of the case doesn't exports the 0 documents matching queries. #504 by @atarora fixes #501.
-
Move the logic for the default ES and Solr server definitions from server AND client side to just client side. #505 by @epugh fixes #503.
-
Limited encoding renders snapshots unusable. #510 by @epugh fixes #499 by @KennyLindahl. Thanks Kenny for the analysis!
-
Fixed missing query fields from cloning a case. #520 by @epugh
-
Documenting the explicit Information Need of the user is a core part of running human judgements, and historically people used the Notes field for this. Now we have a Information Need attribute for every Query, and you can import/export that data via CSV, as well as edit it in the UI. Mouse over the query to see exactly what the user is trying to do! #480 by @epugh.
-
The details of a specific query exposed by the Explain Query modal is in a Human readable format, but isn't in a JSON compliant format. Now we sort the keys alphabetically, which helps the user dig through the details, and have a Copy as JSON button so you can use other tools to look at the JSON information. #497 by @epugh fixes #492.
-
Delete All Queries for a Case was requested by @negyesi in #475. At the case level added a Delete button that brings up a modal that lets you delete the case, archive the case, or delete all the queries. #486 by @epugh.
-
Frustrated that your custom API that looks like Solr to Quepid has to deal with JSONP callbacks? Now you don't, as we have introduced the ability to swap from the default JSONP to GET api methods when you define your Solr end point. This is going to simplify the work that folks have to do. #495 by @epugh. For more information refer to the docs at https://github.com/o19s/quepid/blob/main/docs/endpoints_solr.md#solr-endpoints-structure.
-
Do you have a relative image url in your search engine that you want to show via
thumb:
orimage:
? You can now provide some JSON in the field specification to provide that data:id,title:title,{"name": "image_url", "type":"image", "prefix": "https://www.example.org/images"}, description
. This feature is experimental as we learn more about how to have richer field specifications, and may change! #487 by @epugh.
-
The link to view a single Solr document specifies XML, which I realize is a very OK boomer approach these days! o19s/splainer-search#107 by @begomeister fixes #494 by swapping to JSON format instead.
-
github.com/teleborder/FileSaver.js repo disappeared, so migrate to an actual published node module
file-saver
instead. #498 by @epugh. -
We had a mish-mash of
query
andquery_text
as headers in our CSV files, so we've standardized onquery
to make export/import simpler. #489 by @epugh. -
We discovered that Redis was ONLY used in Quepid to support sending events to Google Analytics! If your
QUEPID_GA
isn't specified, then Redis is no longer required. Thanks to @rbednarzCBI for updating the production docker settings to remove Redis in #488. -
preserve search engine type when swapping protocol, don't default to Solr! #459 by @epugh.
-
The various CSV upload and export features didn't really handle
,
in the text properly, so we gave that a good going over. #482 by @atarora fixed by #483 and #485 by @epugh -
Tracking the history of your tries, we had a limit in the database that prevented you from having lots of tries. #478 by @KennyLindahl and #470 by @korlowski. Fixed by #479 by @epugh. Thanks @KennyLindahl for the additional testing work you did to help me fix this!
-
Fixed the ability to peek at the next page of result when you have less then 10 results left. Thanks @anegyesi for submitting #473 and fixed in #496.
-
Noticed the case level graph isn't useful? PR #491 by @worleydl, Save scores less often, fixes stretching of graph, fixes this.
-
@thePanz opened a ticket a year ago (#330) about ratings getting progressively slower in the UI, and a huge amount of updates to the backend. Thanks to @worleydl and #490 this should be fixed.
-
Updated Splainer-Search to https://github.com/o19s/splainer-search/releases/tag/v2.13.0 to enhance snapshots with ES, and make our parsing of ES.
-
When Quepid switches between HTTP and HTTPS protocols, the flash message "Reloaded on HTTP protocol for Quepid app to match search engine URL" causes some CSS layout issues which led to the "Run my Queries" button to slide off the page! Darn you CSS. First spotted by @nathancday, while giving a demo of course! Fixed by #463 by @epugh.
-
When reloading from HTTP to HTTPS Elasticsearch during the case wizard, we lose the default query params for ES, we end up with the default Solr query params! #457 by @epugh and @wrigleyDan. Fixed by #464 by @epugh.
-
Build was failing for Apple Silicon M1 users! #430 by @llermaly and fixed by @wrigleyDan via #460.
-
Missing doc" error when comparing with snapshot in Elastic when using non standard Id, #466 by @KennyLindahl fixed by splainer-search 2.13.0.
We've taken a rag and polished up the Find and Rate Missing Documents modal box in this release. We've also completely redone how we attempted to handle http and https connections from Quepid to http and https search engines that was first introduced into 6.9.0 based on what we've learned in the real world.
-
Reworked the handing of http and https connections to Quepid when connecting to http and https search engines. Added in Development mode a nginx based proxy to make http://localhost/ and https://localhost/ work, which is also how you would deploy Quepid in a Production set up. Still works fine on http://localhost:3000 if you only use http based search engine connection. Big thanks to @jzonthemtn for #451 which fixes #444 and #438.
-
The Find and Rate Missing Documents query interface assumes you use the Lucene query syntax. Turns out we have a highlighter built in, so enable that for Lucene syntax. #453 by @epugh.
-
Writing your own scorer? The modal popup window is rather cramped, so let's give the editor room to breathe by making them larger! #452 by @epugh.
-
In the early days of Quepid, looking up a single Solr doc would trigger a
facet.field
on every field you display in Quepid. For some Solr's, this can turn a quick lookup for a single document to a 30 second or more ordeal because of unexpected faceting! Thanks to @jeffryedvm for opening #442. Fixed by #456 by @epugh.
- On the Find and Rate Missing Documents screen the ability to show just the rated documents had an issue that you had to click the button twice, making you think it was broken. #454 and #423 by @epugh are fixed in #455 by @epugh.
-
Splainer-search 2.11.0 handles nulls the same as empty arrays ({ }) in Solr output. Nulls might happen when a Proxy is used. #440 by @epugh fixes issue discovered by @mkr in o19s/splainer-search#97.
-
Node 15 is not a LTS version, which leads to a warning message! #437 by @epugh bumps this.
- Chrome 94 forces you to be on https URL to access HTTPS secured search engines. Quepid now checks to see whether it is running on the same protocol, HTTPS or HTTP that the search engine is running on, and if not, prompts you to reload the app on the same protocol as the search engine. This required updating the messenging in the Case Wizard and the Tune Relevance screens. We also simplified the logic in the
home_controller.rb
around bootstrapping a Case and Try. Thanks to @tboeghk for pairing with @epugh on how to solve this problem. #431 by @epugh fixes #426 by @DmitryKey and #432 by @bbirrell.
-
Remove remnants of "SecureApp" angular1 app that was refactored a while ago into regular Rails app for login screens. #434 by @epugh fixes #433.
-
Logic to enable Google Analytics tracking was crufty and caused classloader issues in development mode. #419 by @epugh fixes #418.
-
Understand the evolution of your various Tries by visualizing the history as a tree data structure. Understand where you went back to an earlier Try and branched off in new directions. #412 by @epugh fixes #412 by @DmitryKey.
-
Deploying Quepid in a cloud native way requires having a healthcheck end point to confirm Quepid is available and happy. #404 by @epugh fixes #404 by @mkr. Thanks to @xaviersanchez for the inspiration to do this.
-
Now sort queries by most recently modified. #334 by @DmitryKey and @epugh fixes #307.
-
Excited to share the improvements you made to your Case? You can now drop your link to the Case into Slack or other messaging tools, and it will unfurl, i.e show the Case Name and the most recent Try number. You will still need to log into Quepid and have access to that Case. #417 by @epugh fixes #416.
-
The messaging around how many documents are being scored, i.e
@10
or@40
is now driven by the variablek
defined in various Scorers. Commit 73a378f9bae777cb504618cdc3361bfec52ff82f by @epugh fixes #413 by @DmitryKey. -
We audited our Docker builds, and _shrank the images from 2.42GB to 1.44GB! Bumping Node version to 15, be smarter about what folders we copy into our production image, and some general fixups. #409 by @dworley and @epugh.
-
The logic to check if Google Analytics is enabled via ENV variable is different then the normal Quepid ENV handling. #419 by @epugh cleaned this up, and solves a class loading issue in the DEV mode Quepid, increasing developer happiness!
-
Trying to find a doc that SHOULD match and be rated, but can't find it? Using a global scorer like NDCG and curious what all the ratings are? We have reworked the Explain Missing Documents UI into a Find and Rate Missing Documents that lets you see all your ratings associated with a query, and then search and find other documents that are missing. Preview video here https://share.descript.com/view/IkxWkjSzzKF. #407 by @epugh fixes #406 by @mkr.
-
Elasticsearch fields computed using script query now work! Back in February @CGamesPlay contributed a PR (o19s/splainer-search#90) to
splainer-search
to support this, and now it automagically works in Quepid! Thanks @DmitryKey for opening #327 and supporting this feature. -
Elasticsearch templates can now be used in Quepid! #400 by @epugh exposes the underlying
splainer-search
functionality in Quepid. Thanks @danielibars for opening #274 and supporting this feature. -
Curious what parameters are being used by Solr to construct the query? We're now adding a
echoParams=all
to queries and surfacing them in the Explain Query modal at the query level in Quepid. Currently a Solr only feature. #397 by @epugh with inspiration from @mkr.
- Continue cleanup of JavaScript, eliminated last remnants of "unit test" style scorers, and renamed
customScorer
to justscorer
in front end app.
- In testing the Keycloak oAuth integration via the Chorus project, identified that the name of the Client that is passed to Keycloak was tied to the
KEYCLOAK_REALM
env setting. Changed this to be hardcoded toquepid
so it can be different then the Realm name (i.e the Realm is Chorus in the Chorus project, and the Client is quepid). Commmit de9e0e645ddb4cb02644680ed8af456a167023dd by @epugh.
-
OpenID Support! Historically you had to create your own account on Quepid, but that is another barrier to entry, and something else to keep track of. Inspired by the issue Add OAuth Providers by @gregoryduckworth #188, #280 and #389 by @epugh implements the first two providers, Google and Keycloak.
-
Explain Query Parsing! We often want to know what the search engine is doing to our query. Now you can click the "Explain Query" popup and see what is happening to your query and the various filter queries. This works with both Solr and Elasticsearch. https://twitter.com/dep4b/status/1420480501710827520. #391 by @epugh.
-
Frequently type
deftype
instead ofdefType
in Solr? I found an old, but broken feature that provided a popup warning on common Solr query syntax errors, which has now been restored. #394 by @epugh fixes #390.
-
Quepid is running on Rails 6! Rails 6 was released ~26 months ago, and represents the future of Rails. I'm excited that this push initiated by @DmitryKey is going to bring us some great new features like: better developer experience with Webpack for JavaScript, ActionText to handle better text formatting of notes and messages about Cases and Queries, ActionCable which will let us notify all the users of the same case that data has changed when it changes. #381 by @DmitryKey with assist from @epugh.
-
Make our ActiveRecord modeling for ownership the same. Teams have an owner, Scorers have an owner, but Cases have a user. Now we have case.owner relationship. #359 by @epugh.
-
The nav bar link for Scorers is labeled "Custom Scorers", and takes you to an page called
/advanced
. Both of the names are rather offputting. Creating Scorers is a normal common thing to do in Quepid, so lets label it Scorers. #392 by @epugh fixes #351. -
We had, as someone put it "dinosaur" age CSS tags for mozilla and webkit browsers that triggered lots of browser warnings in the console. #380 by @epugh cleaned up many of them. It has also prompted some thinking about migrating to Bootstrap 5 for the non core pages. If anyone has some CSS skills, please contact @epugh, to help refine the header menu in Bootstrap 5 CSS.
- You can now tag a field with
translate:
, as intranslate:content
and you will get an icon to pop the text open in a Google Translate in a new browser window. #386 by @epugh.
-
You can now export fields that have the formatting modifiers
thumb
andimage
using the detail format. Also improved the handling of the General and Detail export from the Case Listing page. #383 by @epugh fixes #382. Thanks @DmitryKey for the improvement assist and spotting the Case Listing export issue. -
Admin user can now reset a users password with a new password. #385 by @epugh to fix issue identified by @michaelcizmar. Thanks Michael!
-
Trying to communicate about HTTPS better when you set up a case. #384 by @epugh inspired by #279 by @arafalov.
- You can now Clone an existing Scorer!. Super useful when you want to start with one of the communal scorers that only go to 10 deep, like P@10, and you want it to be P@40. Introduced as part of #379 by @epugh.
-
Enable TLS for Redis 6 on Sidekiq on Heroku. #370 by @michaelcizmar fixes #271 by @michaelcizmar. Thanks Michael for your first PR to Quepid!
-
During the Case Wizard setup, allow space delimited list of fields, like
title overview
to be pasted in, just like comma delimited lists. Thanks @peterdm for the assist on the Regex! #378 by @epugh. -
Revamped the layout of the Scorer creation and editing screens to be visually cleaner. Retired the old Fibonnaci scale, and renamed Default to Detail, as well as Short to Graded scales. Introduced Binary as a new, default scale. @DmitryKey and @epugh paired on this during Quepid Qommunity Qoding hour, resulting in #379.
-
Shrink production Docker image of Quepid from 2.19GB to 2.17GB by not installing development and test Gems. Commit 426d2677f6c4a8380971ddc1b0faa42a53a48879 by @epugh.
-
Preserve the chosen scorer when cloning a case, we were defaulting to the users default scorer. #372 by @epugh fixes #273. Thanks @binarymax and @nathancday for spotting this!
-
Ensure that CSV export always has all the columns expected. Queries that aren't fully rated and have blank values didn't put out complete set of , separators. #371 by @epugh fixes #364 by @sstults. Spotted while working with Quaerite.
-
If you don't have a Terms & Conditions url, then your users don't have an
agreed_time
, so the activity pulse chart in the admin errors out. #373 by @epugh sorts this out. -
In the dawn of Quepid, we had
agreed_time
but not a booleanagreed
. A user let me know he couldn't update his email address (from an account in 2015!) because he didn't haveagreed=true
set. #374 by @epugh cleans up some old user data. -
Fixed the labeling behavior for a Scorer. @DmitryKey and @epugh paired on this during Quepid Qommunity Qoding hour, resulting in #379, fixing #376.
-
In 6.5.2 we introduced the
image:image_path
to show larger images, however there is odd wrapping if you don't have many fields listed for a doc. #365 by @epugh fixes this. -
If you didn't have email set up, then sending invites wouldn't work. #369 by @epugh adds better handling for when email hasn't been set up for Quepid.
- We have a new Favicon, but didn't use it everywhere, so #363 by @epugh displays the new favicon everywhere.
- Rating documents where the image carries most of the information? The existing
thumbnail:image_path
limits you to a 75 pixel wide image. We now haveimage:image_path
which displays a 200 pixel wide image. This is an alternative to themedia:image_path
approach, as this shows up next to your fields versus inline with your fields. #362 by @epugh fixes #360.
-
Now that we've had the team invitations feature out for a while, we've found places where we make assumptions that aren't correct. This fixes the Admin panel's user page, and makes on the Teams page the messaging around pending invites. #339 by @epugh.
-
We discovered that nDCG@10 score for products with a hitCount below 10 (K) was always 0. #336 by @rudibatt fixes this. Thanks @rudibatt for this contribution!
-
Passing in quote delimited parameters to
bin/docker r
wasn't preserving or quotes or escaping the spaces, causing thethor user:create foo@example.com "Eric Pugh" "mysuperstrongpassword"
example to fail. #340 by @epugh fixes #338. -
Thanks to Liz Novak at VIN for discovering that a non lowercase email address like
person@EXAMPLE.org
wouldn't be considered a valid email address, so you couldn't send a invite to join Quepid. #342 fixed by #346 by @epugh with assist from @eribeiro.
-
Uglifier for JavaScript appears to not work with ES6, and so using Terser instead. #329 by @epugh fixes this.
-
Add to the Team page the ability to copy the team invitation url to send via other means then Quepid's own email setup. This is helpful if you don't have email set up, or if you want to share invites with team members via chat tools like Slack. Also fixed the user flow of registering after someone has sent out an invite for someone. #337 by @epugh fixes #335 and #326.
-
We've added linting for our Dockerfiles via Deepsource.io. #343 by @epugh fixes #341.
-
Our Docker images are getting bloated by including log files from dev and test, leading to almost a 3 GB image. Adding a
.dockerignore
has got us back to around 2.1 GB image. #358 by @epugh fixes #353. -
Remove the remnants of the query test (unit test style custom scorers) and the default scorer table that are still in the source code. #357 by @epugh fixes #349.
-
Sometimes you want to create a Case even when you can't validate the connection. Introduce a option to bypass the validation. #356 by @epugh.
-
When we export basic rating data there is an extra LF character at the end of the CSV file. This was causing issues when importing ratings into the Quaerite project (tballison/quaerite#14). #355 by @epugh with assist from @sstults fixes #354 by @sstults.
-
Quepid 6.5.0 started failing on Kubernetes clusters due to the need to be able to write to the filesystem. Bootsnap dependency upgrade avoids this. #344 by @epugh. Thanks to @LiuCao0614 and @tonomonic for the assist on this.
-
Revamp of how all the permissions for doing actions related to Teams, Scorers, and Cases to use the Permissions data we aleady have for a user. Lots of cleanups on those functions. Finally dealt with the left over need to have a Case per User, or the UI blew up. Now you get a nice message, and the UI doesn't blow up. #347 by @epugh fixes #352, #331, #278.
I can sum up this release of Quepid as either the Hey friend, come join me in improving search release or the so much technical debt has been paid down release.
For those of you upgrading your Docker based install, there are two new ENV variables you need to add to your docker-compose.yml
file:
- RAILS_LOG_TO_STDOUT=true
- RAILS_SERVE_STATIC_FILES=true
Hey friend, come join me in improving search
We have added features that make it easier for you to invite your colleagues to come join your team and start rating documents. We have reworked the initial case creation wizard to be smarter about popping up only the first time you decide to create your own case, instead of having it jump into the user flow when you join an existing team with existing cases. This should make it easier to bring folks interested only in rating docs into Quepid. As part of this, we've also added support for deleting individual Cases and User accounts. So if you invite someone, and change your mind, you can clean up after yourself.
so much technical debt has been paid down
We are finally off Rails 4.2 and are now on the latest Rails 5 release, and we have a shiny new favicon to go with it! We've updated all of our frontend dependencies to the latest versions possible, congruent with the core app still being based on Angular1. The lift from Rails 4 to Rails 5 was a massive effort, and a huge round of thanks goes out to everyone who reported bugs. We've shrunk our list of dependencies by 10% over the v6.4.1 release, and 29% compared to v6.0.1 release, and we're set up now to look at new front end technologies!
We also did some housecleaning by ripping out some features that hadn't seen adoption by users, including "soft delete" of queries and the "unit test" style of custom scorers.
-
Invite your friends to join your team on Quepid! You can now send an email with an invite code to join Quepid and your specific team. #259 by @epugh. #305 by @epugh introduced better support for tracking of if someone had gone through the create case wizard or not, extending this feature.
-
Add support for sending emails via SMTP, or use Postmark, or don't send emails. #276 by @gabauer fixes #275.
-
Let a user (or an Administrator) delete their account from Quepid, handling their cases, scorers, and team memberships. #315 by @epugh fixes #311.
-
You can now Delete a case altogether! Historically we had an Archive function, so that you could restore an old case. However, if you are like me, you create lots and lots of throwaway cases, so this allows you to clean up your Quepid setup. This PR also fixed some data modeling issues, and the problem of sometimes have a Try of zero, instead of the default first try of One! We also always include the Try number even if you have named the Try, since that is a big deal. #288 by @epugh fixes #250. Thanks @DmitryKey for help QA'ing this code.
-
We now have a favicon for Quepid! #317 by @DmitryKey.
-
Upgrade to Rails 5 and Ruby 2.7.2! We have been stuck on Rails 4.2 for years, and this unlocks a lot of new capabilities. #256 by @epugh with inspiration from @worleydl.
-
Renamed "Export Case" and "Import Ratings" to just "Export" and "Import". #270 by @abhishekChoudhary93 fixes #195.
-
Pay down some tech debt by removing our use of Coffee Script in Quepid. #283 by @epugh.
-
Build time on CircleCI dropped from ~135 seconds down to ~105 seconds by removing
sass
gem in favour ofsassc
. #285 by @epugh. -
We have simplified our queries that involve cases and users that are part of teams by making the simplifying assumption that all owners of teams are also members, which turns out to be true in practice. We also have audited our use of
.includes
to load child objects (avoiding the N+1 problem), and used more.preload
to try and deal with running out of temp space in our database. #286 by @epugh. -
Turns out we had a ERD diagram all along, but it was hidden. Now you can see it on our Data Mapping page, plus we have how to recreate it documented and integrated. #287 by @epugh.
-
Remove obscure
quepidIf.js
file that doesn't seem to do anything. #293 by @worleydl. -
The Export All Cases feature only supported the old "Detail" format, and none of the other export formats, like LTR, Basic, or RRE. Plus the filtering options of "All, Owned, Shared" was pretty simplistic. It wasn't being used, and it added some complexity and performance issues to List All Cases page. So we removed it. #295 by @epugh fixes #294.
-
Unit Test style custom scorers let you run a unit test that asserted specific things about specific docs at specific ranks in your search results. This logic however was always convoluted, and only 15 people since 2019 have used it, and I suspect by accident ;-) We want better ways of handling this type of function, so removing this to pay down some tech debt, simplify the database architecture, and open the door to new approach. #296 by @epugh fixes #290. #313 also dealt with this.
-
We have removed the Soft Delete for Queries to simplify how Quepid works. If you delete a query in Quepid it is now fully deleted from the database! This is a nice bit of paying down tech debt. Huge thanks to @DmitryKey for testing this PR. #299 by @epugh fixes #298 by @DmitryKey.
-
The
/case
url is one we frequently end up with, and it generates a 404. Thanks @DmitryKey for suggesting we have it route to the case listing page/cases
instead. #304 by @epugh. -
The logic around when we popped open the "Create a Case" wizard for a brand new user was somewhat split between the backend
home_controller.rb
and the front end. It also made anyone who was invited to a team just for rating purposes go through the Create a Case Wizard on their first login, which was awkward. So, converted the concept of a "first_login" for the wizard to just a boolean "completed_case_wizard", and now it it checked if you have NO cases, and popped up, or if you click "Add a Case". #305 by @epugh fixes #281. -
Upgraded to the latest version of Angular 1, 1.8.2, and many of the other front end dependencies. #308 and #324 by @epugh and #320 by @worleydl deals with this.
-
You can now override the from email address from the default
quepid@o19s.com
to your own email address. #322 by @slawmac. Thanks @slawmac for this improvement!
-
You can export a rating that has no actual rating value chosen! #266 by @epugh fixes #265.
-
Fixing typo in defining aria-hidden html tag. #269 by @abhishekChoudhary93 fixes #268.
-
Rails 5 Upgrade Hangover: fixed strong parameters validation issues, fixed wonky left outer joins on cases showing duplicate cases (and killed performance), eliminated the
user_case_finder.rb
class in favour of simpler scopes. #292 by @epugh w/ assist from @worleydl. #314 by @worleydl is related. #321 by @janhoy fixed by #323 by @epugh. -
Thanks to @DmitryKey for spotting that we were not tracking scorers for cases (bug introduced when we added the Show Only Ratings feature). #303 by @epugh and @worleydl fixes both #306 AND #289. A twofer!
-
Thanks to @DmitryKey for spotting that we were not properly storing the Elasticsearch choice. #310 by @epugh fixes #309.
-
There is a known issue where expanding/collapsing queries on a larger case, the UI can become completely locked in Chrome, forcing the user to close out the tab. Thanks to some next level debugging by @LiuCao0614 we have a workaround that disables the JQuery based drag and drop sorting feature that appears to avoid this bug. This is not a fix! This is a workaround! Set
QUERY_LIST_SORTABLE=false
in your environment to disable the sorting of queries feature. #272 tracks this ongoing issue.
In the 6.4.0 release, the correct splainer-search NPM package was missed in the production Docker image.
This release resolves that oversight. Thanks @LiuCao0614 for testing the upgrade process and reporting the issue.
-
Small housekeeping update for the hosted app version running on Heroku. #267 by @dworley.
-
Clean up last scoring run details on the Cases Listing page. Now better iconography to call out cases that have queries that need rating. #261 by @epugh fixes #219.
- Don't export ratings that don't have a rating set for RRE and Basic export formats. #266 by @epugh fixes #265.
Only Rated toggle is a powerful new feature added to Quepid, our first relevancy centric feature in a long while.
In certain relevancy cases, you may only care about the ordering of a subset of documents within the entire result set. One particular use case may be in e-commerce where you want certain products to be boosted and others to be demoted in the ranking algorithm. While this was doable in previous versions of Quepid, it could get difficult to manage the list of rated documents, especially if the list went many pages deep into the results.
To help solve this problem we worked with Kobler to introduce several new features to Quepid. We strived to make it easier to work with your corpus of rated documents in the main case view, inside of Explain Missing Documents and within the scorers themselves.
This feature was developed by @worleydl in #229, with an initial POC by @janhoy in #220, and resolves issue #163. Much thanks to @janhoy and the folks at Kobler for this feature.
- Added "Show Only Rated" toggle to the main searchResult listing
- Explain Missing Documents modal now defaults to showing all of your rated documents when you first open it up
- Added eachRatedDoc function to ScorerFactory to iterate over rated documents in scoring
- Provided refreshRatedDocs(k) in ScorerFactory for loading a custom amount of rated documents up to k
- Migrated scoring to an asynchronous pipeline
- Fixed stuck "Updating queries" message when creating a new case
-
Round trip export and import LTR ranking files! #204 by @epugh fixes #162 by @DmitryKey.
-
Disable web signups by setting
SIGNUP_ENABLED=false
. #238 by @tonomonic.
-
Easy in-place editing of case name and the try name to encourage using those features! Microinteration FTW! #242 by @epugh.
-
Demonstrate richness of queries in Quepid when you use the TMDB dataset. #236 by @epugh fixes #224.
-
Update Javascript references to
application/javascript
. Pay down some tech debt! #223 by @epugh -
Simplify handling doc id's that have periods or slashes in then, and avoid base64 issues by passing that in the JSON payload. #233 by @epugh fixes #228 and #221.
-
Some Solr collections need manual setup of the
wt=json
mimetype. Add better text message for users. #235 by @epugh fixes #178. -
The CSV export format has a CSV injection vulnerability that is now fixed. #245 by @nicholaskwan fixes #231.
-
The Javascript based scorers could be used maliciously, so we've added an environment variable COMMUNAL_SCORERS_ONLY that controls if only Admins can create communal scorers for use by users. #246 by @jacobgraves fixes #232.
-
Don't show the Sharing icon for communal scorers, since they are implicitly shared globally! #251 by @epugh fixes #247.
-
Allow the export and import cycle of ratings using both CSV and RRE formats to include queries with no rated documents. Don't create a partial rating on import where we only have a doc id but no rating. #252 by @epugh fixes #244 by @LiuCao0614
-
Make it easier for scrapers and automated test tools to log into Quepid by adding some id and class tags to the login forms. #257 by @epugh.
-
Discovered that the migrations from communal scorers being
@5
to@10
didn't always run cleanly. Commits 94dd23990422901082d79b121c1ca86a76907dc3, 8317b543530cc387d5cb89b4942acea5da57ce23, and 19b046485db530162c213a593e5b2e9df8fbbf07 to deal with this. -
Discovered that DELETE of ratings didn't work, and had to work around that. Commit 153047cd4b75d626695f5fc38832f6202eed9007.
-
Missing authorization check for Team Owner. #230 by @jacobgraves fixes #230 by @testerTester0123456789.
-
Can't rename a case on the Teams page. #240 by @epugh fixes #213
-
Fixed scoring of AP@10 and NDCG@10 when you have fewer then 10 results. #253 by @nathancday fixes #225 by @epugh.
- Silly cut'n'paste error that should have been caught with more testing before the 6.3.1.1 release, not the day after. Fixed in commit 2e322b337cc62895847df0ed95ba6a68683dad5f by @epugh.
- Default communal scorer was set to AP@5, however in release 6.3.1 we renamed it to AP@10, so doing a quick release. Fixed in commit 182f14d8a667759cdda559fd0ed5e063167b6914 and ad29ad199dcd25231d364e2ca95d2c09cac195ac by @epugh.
- Also found some issues with the
seeds.db
names being used. Commit 26edccfa407119b46b6f4316f44f34d0e3e87a9f by @epugh.
-
When we rolled out classic graded scorers (CG, DCT, NDCG) we used a 5 point scale, that allows you to pick a "no choice" middle option. However industry standard (for example RRE) is 4 point scale, so lets use 0,1,2,3 as our choices. New Best Practices document https://github.com/o19s/quepid/wiki/Judgement-Rating-Best-Practices by @binarymax is availble to help educate you. #206 by @epugh fixes #205.
-
Closely related to the scale change, all the classic scorers used a @5 depth of scoring, however the other industry standard in rating is to score ten deep documents, @10, so #209 by @epugh makes this change as well.
-
Encourage use of profile pics by adding help text in Profile page that they come from Gravatar.com. #202 by @epugh fixes #201.
-
Use the same header navigation bar in both the main application and the Admin screens. #203 by @epugh refactors this logic.
-
Added
bin/docker c
option to jump into the Rails Console during development, and cleaned up the other options. #200 by @epugh.
-
Running
bin/setup_docker
more than once always had hiccups on dropping MySQL, and needed adocker-compose -v
, so just make that part of the script. #208 by @epugh fixes this. -
Making HTTP links clickable wasn't working in some cases. #211 by @e-budur fixes #183.
- We want to export unrated query/doc pairs, which is only supported via exporting a previously created Snapshot. Add support for exporting a Snapshot to the Basic format on the Export screen. #191 by @epugh fixes #185.
-
When importing queries, you can have it clear all existing queries. This feature only worked for CSV files, not other formats like RRE. #193 by @epugh solves this.
-
You can now import queries using the Import Ratings screen. Most of this was already supported, however now the modal dialog has better instructions to the user, and nicer validation of CSV formatting. #192 by @epugh solves this.
-
When sharing Cases or Scorers, the lookup for what Teams you are part of created a really large JSON response (@epugh would get back a 1.4 MB payload!). We put this API response on a diet! #197 by @epugh solves this.
- When exporting for RRE, we need the ES or Solr index name. Extract this from the url for the most recent try and save a step! #167 by @epugh fixes #159.
- If you link to either a case that doesn't exist, or you don't have permission for, or a try that doesn't exist for a case, then provide messaging back in the UI! Let's share some Quepid Cases! 933ed257198ebe21ff86b7e35573d3172cc2e593, 99ac27c1f8698ed726580a4c46eaf6810a4372d2, and 37b95b89fa848b0af2bae3d5a9541141e5d80d62 by @epugh to main branch fixes #158.
getCaseByNo
only used in tests. #173 by @epugh removes code.- There was a partially working attempt at a result grid view instead of list view. It wasn't rendering in the UI, and we want to have a more general solution in the future, so removing the code to simplify Quepid. #174 by @epugh fixes #171.
- When using the case wizard, you couldn't cut'n'paste in a long list of fields like
overview_en, overview_idioms
as they became a single tag. #166 by @epugh fixes #165. - A
:
in the case name was converted to a - The implementation of autosaving your notes per query didn't work well. Going back to an explicit save button. #170 by @epugh fixes #164. Thanks @DmitryKey for the issue!
- Remove warning in server log on parameters. #182 by @epugh fixes #180.
- Community member spotted that doc id's with
blah-http-blah
triggered base64 encoding. Simplified handling docs with an id with a.
or/
in them. #179 by @worleydl and @epugh fixes #175.
Thanks to some feedback from the community, we figured out that the SQL script for
migrating data from the DefaultScorer table to the Scorers table (and being tagged
as communal
) didn't run reliably. We've pulled it out as db/release_6_2_0_merge_default_scorer_into_scorer.sql
for folks to look at.
- #157 identified the issue and fixed by @worleydl.
- Commits a1fc942d32e3d524836492f745735ce4ec4972ff and 029dd0cafe8caa492095c9483617b623a6a4e437 and 1a3c997f59b144a1cbffa59a04c67cb3e051b32d cover the migration fixes.
This release of Quepid finally introduces the classical search geek scorers like NDCG, DCG, Average Precision, and friends by default. We've also fixed a large number of bugs introduced by changes in Firefox and Chrome browser security models that happened in the first part of 2020, as well as recent updates to Elasticsearch and Solr.
The burgeoning suite of open source tools for relevancy all require judgement lists. We revamped Quepid to handle exporting and importing from your favorite tools like Quaerite and RRE, as well as a Learning to Rank formatted export. You can see this in action in Chorus, an ecommerce search focused stack that includes Quepid.
Ease of development has long been an issue with Quepid. In this release we've worked on developer happiness by auditing all of the dependencies we include. We're removed quite a few Ruby gems and Node packages that weren't used, and upgraded the rest (replacing PhantomJS with Puppeteer for headless testing). yarn.lock
dropped from 6706 lines to 1525 and Gemfile.lock
from 448 to 330! This allowed us to finally move to ECMAScript 6 and Node version 10. Lastly we have cut the production Quepid Docker image from almost 3 GB down to 2.3 GB.
Follow the steps outlined at https://github.com/o19s/quepid/wiki/Installation-Guide#updating-quepid.
You will need to run some database migrations to update the database and insert the new classical scorers (NDCG, AP, etc).
There is a sql migration script in ./db/release_6_2_0_merge_default_scorer_into_scorer.sql
that you might want to look if you have been using Quepid locally for a while. This script is primarily meant to support updating http://app.quepid.com database for the 6.2.0 schema.
QUEPID_DEFAULT_SCORER is a new environment variable specifying the name of the default scorer for users when they create a new case. QUEPID_DEFAULT_SCORER=AP@10 is what app.quepid.com uses.
- Quepid Default Scorer Admin screen is buried in UI. Add it to the dropdown menu. #96 by @epugh.
- Support Basic Auth in Quepid with Elasticsearch. #114 and o19s/splainer-search#79 by @CGamesPlay fixes #109.
- When installing Quepid, use
thor user:create
to create an administrator! #112 by @epugh fixes #107. - Enhanced export ratings function that follows the standard
query,docid,rating
supports full export/import lifecycle and easier integration with other tools. #128 by @epugh fixes #126. - Export ratings in RRE and LTR file formats. Import ratings from RRE Judgement JSON file. #137 and #139 and #152 by @epugh fixes #133
- Classical scorers like AP, DCG, and NDCG are now shipping by default. All new users who sign up on Quepid will start with AP@5. This effort is still in progress, for example right now the scorers are named AP@5, DCG@5, NDCG@5 because they are hard coded to only look at the first five ranks. We also need to work on the Q Score Graph's vertical axis handling. Huge effort in #100 by @nathancday and @epugh to get this done. This change also removes the individual query level scorer being assignable, which was a bad idea (#132) and restores the ability to write a custom unit test for a query in Javascript (#120) which is an interesting idea! Thanks to @janhoy for being the impetuous to get this work done!
- Community member reported the default demo TMDB Elasticsearch server on port 9200 had no data. Having seem random "drive by vandalism" of our demo Solr and ES servers that run on default ports, we want to move away. Yes, security by obscurity. #103 by @epugh changes default used in Wizard to port 8985 and 9206. #125 and #104 migrate existing URLs to the new ones.
- Increase Developer Happiness by speeding up the
bin/setup_docker
script by caching RubyGems. 50% speed up! #105 by @nathancday. - Remove the concept of "communal" i.e shared with everyone scorers. This feature has been in Quepid for years, yet even @softwaredoug didn't remember it! #99 by @epugh fixes #98.
- In the beginning of Quepid, before there was a Search Relevancy community, there was just one, slightly janky scorer, that wasn't like any of the standard search geek scorers (looking at you NDCG) that we use today. We are building towards supporting many scorers, so it's time to remove the
DEFAULTS
definition of a scorer, and the related scope in ActiveRecord. #97 by @epugh. - Solr 8.2 tightened up the security profile for accessing it that we depend on via JSONP to have Quepid work. Now the wizard provides you the command to run on your Solr if it can't connect. #95 by @epugh fixes #92.
- Using the default
tmdb
dataset? Demonstrate thethumb:poster_path
feature. #94 by @epugh fixed #72. - Rename
user.username
in database touser.email
since that is what we use. Clean up API. #113 by @epugh fixes #111. You will need to run database migration for this release! - Audited code base to prune dependencies and remove unused code. #121, #119, #118, #116 all worked towards this goal.
- Turns out Quepid has a Curate interface. It isn't supported, so in the interest of reducing our codebase, removing it. Points the way for the future however! #123.
- Deal with sameSite cookie warnings from Firefox. #131 by @epugh fixes #130.
- curator variables (i.e knobs and dials) that aren't used in query cause weird UI. #135 by @epugh fixes #64.
- Saving two annotations in a row doesn't work, you need to rescore per annotation. Fixed in #136 by @epugh.
- Users can opt out of community marketing emails. Add a
/admin/users.csv
export to make keeping track of that easier. Thanks @flaxsearch for the suggestion. - Inconsistent use of X icon in modal popups is frustrating. #148 and #149 by @worleydl fixes #146 and #145.
- Swap the sorting of tries in the history tab to the newest first, going back in time. #151 by @epugh fixes #143 by @renekrie.
- Be clearer that MySQL is the only supported database platform. #156 by @epugh fixes #155 by @janhoy.
- Wizard Autocomplete Didn't work well with Keyboard. Autocomplete suggestion had to be clicked with a Mouse. #94 by @epugh fixes this by upgrading package.
- Multivalued and nest JSON fields didn't display well, you would get
[object Object]
instead. Now we display arrays and Json properly. #117 by @CGamesPlay fixes #52. - fixed highlighting throwing an error on Solr date fields by using
hl.method=unified
in Splainer-Search v2.5.9. #84 created by @janhoy. - fixed fields with a
.
likefoo.bar
failing to be rendered in UI in Splainer-Search v2.5.9. #106 created by @rjurney. - When a try number is not specified for a case, automatically redirect to the most recent try. #122 by @epugh fixes #110 by @binarymax.
- Case shared via Team with me has NaN for the Try. #134 by @epugh fixes #83.
- Not able to export cases from a Team page. Commit quepid@021bda8627463986f1ff04ffb1c290195c428c5b by @epugh fixed this.
- Race condition in laying out the main Quepid Screen and the Tune Relevance screen. #147 by @worleydl fixes #144 by @epugh.
- Using the "peek" function to page to deeper search results would lose your
escapeQueries
choice. o19s/splainer-search#87 by @jorgelbg fies this. Bump to splainer search 2.6.0 to include the fix.
- Community member reported race condition in standing up Rails and MySQL and issues with PhantomJS install in the developer
docker-compose.yml
andDockerfile.dev
setups. #75 by @epugh fixes #76 and #73. - Add .dockerignore file to prevent unrelated changes from breaking Docker layer cache fixes by @TheSench #80
- Fix issue where you couldn't clone a case without including the full history. #89 by @worleydl fixes #37 Thanks @janhoy for submitting this bug.
- Fixed display of notes for query disappearing after collapse and then expand of query window. #88 by @dworley fixes #87
- NDCG@10 doesn't include documents that are rated via Explain Other, it only looks at the documents returned by the search engine. We want to be able to have NDCG look globally at all rated documents. #90 by @nathancday and @worleydl fixes #78. Note: We currently have the NDCG@10 scorer in app.quepid.com, however it hasn't been backported to the Docker image or the dev setup in Quepid. See #91.
This release changes the database schema, so you will need to run docker-compose run --rm app bin/rake db:migrate
if you have an existing Quepid.
- Cloning cases now carries any magic variables and their values along to the new case #55 by @epugh fixes #37
- Only treat field content that begins with "http" as a link. #35 by @pfries fixes #34
- Update Elasticsearch logo. #38 by @moshebla
- Remove sqlite from gem, no longer used. #41 by @epugh fixes #40
- Better look and UI experience for the dev panel. #39 by @moshebla
- Show or don't show the T&C's link based on the Quepid configuration. #42 by @epugh fixes #44 by @flaxsearch.
- Add Query button activates in response to query text entered. #43 by @moshebla
- Prevent duplicate queries when using bulk query importer. #49 by @epugh fixes #48
- Production oriented Docker Compose setup for Quepid is ready! Install guide at https://github.com/o19s/quepid/wiki/Installation-Guide. #36 by @epugh was based on original work in #33 by @synhershko. Thanks!
- Update the sample TMDB dataset for Elasticsearch to support
thumb:poster_path
in the field listing. #53 by @epugh - Collapse query results well from bottom (in addition to the top) #28 by @epugh fixes #20 by @peterdm. Thanks @ychaker for reviewing PR.
- Explain Other on ES 6 and 7 Broken. o19s/splainer-search#74 by @worleydl fixes #25.
- Support for embeds of audio/image/video via
media:
. #62 by @worleydl fixes #56 by @flaxsearch - Autocomplete in Case Setup Wizard properly handles
media:
andthumb:
prefixes. Nice refactoring for more prefixes. #46 by @moshebla with refactor by @worleydl. - Post the onboarding wizard you would often see your queries being stalled in loading. Only workaround was to reload the Javascript app. #69 by @worleydl fixes #66
- app.quepid.com needs to get explicit consent from users to receive emails related to Quepid and related features. Introducing a new
customize_quepid.rb
file in initializers to start supporting more customizations of Quepid. #68 by @worleydl. - Only show cookie acceptance popup if COOKIES_URL is set. #71 by @epugh fixes #70 by @epugh.
- Deprecate www.quepid.com/support in favor of linking to wiki. #18 by @epugh fixes #17
- More informative error message when you delete a custom scorer and its in use. #22 by @epugh fixes #21.
- Update to splainer-search 2.5.0.
- Fix setting the default case for exporting when you first load Quepid. #15 by @worleydl fixes #12
- Allow a document to be rated to have an id with a period in it like
mydoc.pdf
. #6 by @epugh fixes #5 - Default query when setting up a new case works across Elasticsearch versions 5, 6, and 7. #3 by epugh fixes #2
- Updates to CircleCI and update Ruby 2.5.7 by @ychaker
- Removes everything related to payments, and makes Quepid "free"
- Adds support for using a CORS proxy for Solr instances that are not configured to allow connections from Quepid
- Replaces use of Vagrant in development in favor of Docker
- Adds support for GDPR
- Adds support for deploying Quepid on Heroku
- Upgrades Ruby version
- Upgrades Angular from 1.4.x to 1.7.x
- A bunch of bug fixes
- bugfix-888 Fixes #886: Locks version number for CSV module.
- bugfix: ES5 displaying attributes - fields are not automatically stored so
stored_fields
will not return anything, instead get the data from the_source
field
- feature: q-score - Added graph for score history
- feature: annotations - User can now take a snapshot of the score with an annotation to describe that point in time
- bugfix-879-880-heatmap-safari Fixes heatmap in Safari
- add support for ES 5+ with
stored_fields
vsfields
- bugfix: Prevent re-escaping % when it's part of an escape char
- bugfix-873-change-try-name Fixes renaming try and reloading name in list
- bugfix-872-duplicate-try Fixes #872: Duplicating a try
- bugfix-852-redraw-results-with-snapshot-open Fixes updating results in open query while comparing with a snapshot
- bugfix-848-close-modal-after-deleting-try Closes modal after deleting try
- enhancement-862-document-qa-workflow Adding documentation for QA flow
- feature-863-explain-disabled-features-for-trial-user Enable popups that explain why trial user cannot perform action
- enhancement-document-magic-variables Adds documentation for Magic Variables
- bugfix-844-add-non-existing-user-to-enterprise Fixes feedback when adding non existent user to enterprise
- bugfix-857-case-insensitive-emails Fixes logging in with emails (making them case insensitive)
- bugfix-845-add-team-member Fixes feedback when adding a team member
- bugfix-843-user-autocomplete Removing entire list of users from autocomplete when adding team member
- feature-use-n-docs-in-scoring Allow users to set how many results to display by default instead of the default 10 results
- feature-company-name-in-profile Adds ability to specify company name in user profile
- feature-120-clone-case Adds ability to clone a case
- bug-796-mass-import-ratings Fixes bug in mass import of ratings
- bugfix-767-viewing-snapshots Fixes bug while views snapshots
- bugfix-big-snapshot Fixes bug while viewing large snapshots