<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Aura – </title>
    <link>/docs/components/global-use-cases/ai-use-cases/tv-search-llm/</link>
    <description>Recent content on Aura</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    
	  <atom:link href="/docs/components/global-use-cases/ai-use-cases/tv-search-llm/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: </title>
      <link>/docs/components/global-use-cases/ai-use-cases/tv-search-llm/tv-search-llm-dialog/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/global-use-cases/ai-use-cases/tv-search-llm/tv-search-llm-dialog/</guid>
      <description>
        
        
        &lt;h1 id=&#34;configuration-of-the-generic-ai-dialog-for-tv-llm-search-uc&#34;&gt;Configuration of the generic-ai-dialog for TV LLM Search UC&lt;/h1&gt;


&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;
&lt;p&gt;How the &lt;em&gt;&lt;strong&gt;generic-ai-dialog&lt;/strong&gt;&lt;/em&gt; must be configured for this use case&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id=&#34;specific-configuration&#34;&gt;Specific configuration&lt;/h2&gt;
&lt;p&gt;The TV LLM Search UC is triggered by the &lt;a href=&#34;../../../../../docs/components/global-use-cases/generic-ai-dialogs/generic-ai-dialog-v1.md&#34;&gt;&lt;em&gt;&lt;strong&gt;generic-ai-dialog-v1&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt; for &lt;code&gt;channelData&lt;/code&gt; v1 or  &lt;a href=&#34;../../../../../docs/components/global-use-cases/generic-ai-dialogs/generic-ai-dialog-v3.md&#34;&gt;&lt;em&gt;&lt;strong&gt;generic-ai-dialog-v3&lt;/strong&gt;&lt;/em&gt;&lt;/a&gt; for &lt;code&gt;channelData&lt;/code&gt; v3.
For this use case, the required specific configuration is set below:&lt;/p&gt;
&lt;p&gt;Example v1:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;generic-ai-dialog-v3&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;onlyIn&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;movistar-plus&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;triggerConditions&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;intent&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;intent.tv.retrieve&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;settings&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;locales&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;tv:tv.error.fpaOrCognitive&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;payloadType&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;tv&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Example v3:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;generic-ai-dialog-v1&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;onlyIn&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;movistar-plus&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;triggerConditions&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;intent&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;intent.tv.retrieve&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;settings&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;locales&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;error&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;tv:tv.error.fpaOrCognitive&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;&amp;#34;payloadType&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;tv&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
    </item>
    
    <item>
      <title>Docs: </title>
      <link>/docs/components/global-use-cases/ai-use-cases/tv-search-llm/tv-search-llm-plugin/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/global-use-cases/ai-use-cases/tv-search-llm/tv-search-llm-plugin/</guid>
      <description>
        
        
        &lt;h1 id=&#34;tv-retrieve-plugin-for-llm-search-uc&#34;&gt;TV Retrieve plugin for LLM Search UC&lt;/h1&gt;


&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;
&lt;p&gt;Complex Logic Framework TV Retrieve plugin for the TV LLM Search UC&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;TV Retrieve plugin for LLM Search UC&lt;/strong&gt; resolves requests from a user to search and retrieve audiovisual content from Telefónica catalogs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Intent&lt;/strong&gt;: &lt;code&gt;intent.tv.retrieve&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Main result intents&lt;/strong&gt;: &lt;code&gt;MEDIA.SEARCH&lt;/code&gt; (default), &lt;code&gt;CHANNEL.PLAY&lt;/code&gt; (when zapping to a live channel).&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;validate-input-request&#34;&gt;Validate input request&lt;/h2&gt;
&lt;p&gt;This step validates that the input request fulfills all the requirements from the &lt;a href=&#34;../../../../../docs/components/complex-logic-framework/clf-global-plugins/input-validation-swagger/&#34;&gt;input schema&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If the input data is invalid, the resource returned is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;../../../../../docs/components/global-use-cases/video-use-cases/global-resources/#common-resources-for-video-use-cases&#34;&gt;&lt;code&gt;tv:video.model-validation.request.error&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;entities-used-for-search&#34;&gt;Entities used for search&lt;/h2&gt;
&lt;p&gt;The plugin works with the following &lt;strong&gt;entity types&lt;/strong&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Entity type&lt;/th&gt;
&lt;th&gt;Usage in search&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ent.audiovisual_channel&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Multiple values accepted, separated by &lt;code&gt;||&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ent.audiovisual_person&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;For participants (actors, directors, presenters, etc.), multiple values accepted with &lt;code&gt;||&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ent.audiovisual_query&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Free text query, multiple values accepted with &lt;code&gt;||&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Multiple entities &amp;amp; values:&lt;/strong&gt;&lt;br&gt;
You can repeat the same entity type multiple times &lt;strong&gt;and/or&lt;/strong&gt; provide several values in a single entity using the &lt;code&gt;\|\|&lt;/code&gt; separator.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;building-the-search-query&#34;&gt;Building the search query&lt;/h2&gt;
&lt;p&gt;The plugin constructs two query strings:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;search_query&lt;/code&gt;&lt;/strong&gt; → technical query sent to Kernel API:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Group query and channel entities in parentheses.&lt;/li&gt;
&lt;li&gt;Joins different entity types with &lt;code&gt;AND&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Query: split on ||, trim each value, and join with OR inside the parentheses (no quotes).&lt;/li&gt;
&lt;li&gt;Channel: trim each value, wrap each value in quotes, and join with OR inside the parentheses.&lt;/li&gt;
&lt;li&gt;Person: trim each value, wrap each value in quotes, and join with AND (no group parentheses).&lt;/li&gt;
&lt;li&gt;Example:
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;(&amp;#34;La 1&amp;#34; OR &amp;#34;La 2&amp;#34;) AND &amp;#34;Brad Pitt&amp;#34; AND (mystery OR series)
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;search_query_response&lt;/code&gt;&lt;/strong&gt; → a simplified, user-readable query string included in the payload and telemetry.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If no entities are present, the plugin returns a &lt;strong&gt;no results&lt;/strong&gt; response.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;api-video-query-handler-4p&#34;&gt;API video query (Handler 4P)&lt;/h2&gt;
&lt;p&gt;Plugin calls &lt;code&gt;Handler4P.tv_4p_handler.get_user_content_search(...)&lt;/code&gt; with the following parameters:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;user_id&lt;/code&gt;: &lt;code&gt;data[aura_user][user_id]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;administrative_number&lt;/code&gt;: &lt;code&gt;data[app_context][user][account_number]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;access_token&lt;/code&gt;: &lt;code&gt;data[aura_user][access_token]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;scopes&lt;/code&gt;: &lt;code&gt;data[aura_user][scopes]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;purposes&lt;/code&gt;: &lt;code&gt;data[aura_user][purposes]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;device_type&lt;/code&gt;: &lt;code&gt;data[app_context][device][type]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;catalog_types&lt;/code&gt;:
&lt;ul&gt;
&lt;li&gt;Default: &lt;code&gt;VOD&lt;/code&gt;, &lt;code&gt;LIVE&lt;/code&gt;, &lt;code&gt;L7D&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Allowed: &lt;code&gt;VOD&lt;/code&gt;, &lt;code&gt;LIVE&lt;/code&gt;, &lt;code&gt;L7D&lt;/code&gt;, &lt;code&gt;LCH&lt;/code&gt;, &lt;code&gt;LSR&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Filtered according to &lt;code&gt;allowed_catalog_types&lt;/code&gt; of the device&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;search_query&lt;/code&gt;: built as explained above&lt;/li&gt;
&lt;li&gt;&lt;code&gt;show_series&lt;/code&gt;: &lt;code&gt;series&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;profile&lt;/code&gt;: &lt;code&gt;data[app_context][user][video_profile_name]&lt;/code&gt; (optional; only if present to avoid API 501 errors)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;commercialization_types&lt;/code&gt;: &lt;code&gt;[SVOD]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;max_quality&lt;/code&gt;: &lt;code&gt;data[app_context][device][max_quality]&lt;/code&gt; (optional)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;current_region&lt;/code&gt;: &lt;code&gt;data[app_context][location][currentRegion]&lt;/code&gt; (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;response-logic&#34;&gt;Response logic&lt;/h2&gt;
&lt;p&gt;Depending on the number and type of results, the plugin builds different responses:&lt;/p&gt;
&lt;h3 id=&#34;1-no-results&#34;&gt;1. No results&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Plays &lt;strong&gt;negative sound&lt;/strong&gt; unless the channel is disabled in the &lt;code&gt;sound_disabled_channels&lt;/code&gt; configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result_intent&lt;/code&gt;: &lt;code&gt;MEDIA.SEARCH&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resource: &lt;code&gt;tv:video.retrieve.no-results&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Status: &lt;code&gt;SUCCESS.NO_CONTENT&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-one-result&#34;&gt;2. One result&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Live channel&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Payload: &lt;code&gt;{ type: details, data: &amp;lt;channel info&amp;gt; }&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Action: &lt;code&gt;REMOTEON.ZAPTO&lt;/code&gt; (with params &lt;code&gt;channelId&lt;/code&gt; and &lt;code&gt;deviceId&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Plays &lt;strong&gt;positive sound&lt;/strong&gt; unless the channel is disabled in the &lt;code&gt;sound_disabled_channels&lt;/code&gt; configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result_intent&lt;/code&gt;: &lt;code&gt;CHANNEL.PLAY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resource: &lt;code&gt;tv:video.retrieve.display.single-result&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non-live content (VOD, L7D, etc.)&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;Payload: details of the single item&lt;/li&gt;
&lt;li&gt;Plays &lt;strong&gt;positive sound&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result_intent&lt;/code&gt;: &lt;code&gt;MEDIA.SEARCH&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resource: &lt;code&gt;tv:video.retrieve.by-default.simple-result&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-multiple-results&#34;&gt;3. Multiple results&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Payload: content list and &lt;code&gt;search_query&lt;/code&gt; (search query response string)&lt;/li&gt;
&lt;li&gt;Plays &lt;strong&gt;positive sound&lt;/strong&gt; unless the channel is disabled in the &lt;code&gt;sound_disabled_channels&lt;/code&gt; configuration&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result_intent&lt;/code&gt;: &lt;code&gt;MEDIA.SEARCH&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Resource: &lt;code&gt;tv:video.retrieve.multiple-results&lt;/code&gt; (with param &lt;code&gt;query_displayed&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;resources-returned&#34;&gt;Resources returned&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;TV Retrieve plugin for LLM Search UC&lt;/strong&gt; may return the following resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tv:video.model-validation.request.error&lt;/code&gt; → input validation error&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tv:video.api.answer.error&lt;/code&gt; → API Video error&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tv:video.retrieve.no-results&lt;/code&gt; → no content found&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tv:video.retrieve.by-default.simple-result&lt;/code&gt; → one non-live result&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tv:video.retrieve.multiple-results&lt;/code&gt; → multiple results&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tv:video.retrieve.display.single-result&lt;/code&gt; → one live channel (tune channel)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;payload-and-actions&#34;&gt;Payload and actions&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Payload&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type&lt;/code&gt;: &lt;code&gt;details&lt;/code&gt; (single item) or &lt;code&gt;content_list&lt;/code&gt; (multiple items)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data&lt;/code&gt;: item(s) from Kernel API&lt;/li&gt;
&lt;li&gt;For multiple results: includes &lt;code&gt;search_query&lt;/code&gt; (human-readable string)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Actions&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sound feedback (positive/negative)&lt;/li&gt;
&lt;li&gt;For a single live channel: &lt;code&gt;{&amp;quot;name&amp;quot;: &amp;quot;REMOTEON.ZAPTO&amp;quot;, &amp;quot;params&amp;quot;: {&amp;quot;channelId&amp;quot;: &amp;quot;$channelId&amp;quot;, &amp;quot;deviceId&amp;quot;: &amp;quot;$deviceId&amp;quot;}, &amp;quot;target&amp;quot;: &amp;quot;stb&amp;quot;}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;status-codes&#34;&gt;Status codes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt;: Final status request. This field includes the following parameters:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;code&lt;/code&gt;: Status code with value: &lt;code&gt;SUCCESS&lt;/code&gt;, &lt;code&gt;SUCCESS.NO_CONTENT&lt;/code&gt; or &lt;code&gt;ERROR.INTERNAL&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;message&lt;/code&gt;: Status message, which describes the status code.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;params&lt;/code&gt;: Parameter that sends details of status. This field does not appear if it is empty.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;example-behavior&#34;&gt;Example behavior&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;“Put La 1”&lt;/em&gt; → detects &lt;code&gt;ent.audiovisual_channel&lt;/code&gt; with value &lt;code&gt;&amp;quot;La 1&amp;quot;&lt;/code&gt; → single live channel result → &lt;code&gt;CHANNEL.PLAY&lt;/code&gt; tune channel with live channel.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;“I want something with Brad Pitt”&lt;/em&gt; → detects &lt;code&gt;ent.audiovisual_person&lt;/code&gt; with value &lt;code&gt;&amp;quot;Brad Pitt&amp;quot;&lt;/code&gt; → multiple results → &lt;code&gt;MEDIA.SEARCH&lt;/code&gt; with &lt;code&gt;tv:video.retrieve.multiple-results&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;em&gt;“Mystery series”&lt;/em&gt; → detects &lt;code&gt;audiovisual_query&lt;/code&gt; with value &lt;code&gt;&amp;quot;Mystery series&amp;quot;&lt;/code&gt; → if no results → &lt;code&gt;tv:video.retrieve.no-results&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: </title>
      <link>/docs/components/global-use-cases/ai-use-cases/tv-search-llm/resources/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/global-use-cases/ai-use-cases/tv-search-llm/resources/</guid>
      <description>
        
        
        &lt;h1 id=&#34;tv-llm-search-uc-resources&#34;&gt;TV LLM Search UC resources&lt;/h1&gt;


&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;
&lt;p&gt;Resources used by the TV LLM Search UC&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The TV LLM Search UC will use three different types of resources:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;../../../../../docs/components/global-use-cases/video-use-cases/global-resources/#aura-platform-global-resources&#34;&gt;Aura Platform global resources&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;../../../../../docs/components/global-use-cases/video-use-cases/global-resources/#common-resources-for-video-use-cases&#34;&gt;Common resources for video use cases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#specific-resources-for-the-use-case-tv-llm-search&#34;&gt;Specific resources for the use case: TV LLM Search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;specific-resources-for-the-use-case-tv-llm-search&#34;&gt;Specific resources for the use case: TV LLM Search&lt;/h2&gt;
&lt;p&gt;The resources associated to the TV LLM Search plugin are defined below:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Specific resources for TV LLM Search use case&lt;/th&gt;
&lt;th&gt;Definition&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Managed by&lt;/th&gt;
&lt;th&gt;Scope&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tv:video.retrieve.by-default.simple-result&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when the search finds one result&lt;/td&gt;
&lt;td&gt;Here is the content I found&lt;/td&gt;
&lt;td&gt;tv.retrieve plugin&lt;/td&gt;
&lt;td&gt;Use case-specific&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tv:video.retrieve.multiple-results&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when the search finds more than one result&lt;/td&gt;
&lt;td&gt;Here are the contents I found&lt;/td&gt;
&lt;td&gt;tv.retrieve plugin&lt;/td&gt;
&lt;td&gt;Use case-specific&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tv:video.retrieve.display.single-result&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when the search finds a single live channel and starts playback&lt;/td&gt;
&lt;td&gt;Tuning to channel with live channel&lt;/td&gt;
&lt;td&gt;tv.retrieve plugin&lt;/td&gt;
&lt;td&gt;Use case-specific&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;tv:video.retrieve.no-results&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when the search does not find any result&lt;/td&gt;
&lt;td&gt;I haven’t found anything&lt;/td&gt;
&lt;td&gt;tv.retrieve plugin&lt;/td&gt;
&lt;td&gt;Use case-specific&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

      </description>
    </item>
    
    <item>
      <title>Docs: </title>
      <link>/docs/components/global-use-cases/ai-use-cases/tv-search-llm/ai-config-obs/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/global-use-cases/ai-use-cases/tv-search-llm/ai-config-obs/</guid>
      <description>
        
        
        &lt;h1 id=&#34;ai-configuration-by-ob&#34;&gt;AI configuration by OB&lt;/h1&gt;
&lt;p&gt;The following information applies to both &lt;strong&gt;Spain&lt;/strong&gt; and &lt;strong&gt;Brazil&lt;/strong&gt;; there will not be separate blocks for each OB.&lt;/p&gt;
&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;LLMs UCs are configured and located within the &lt;code&gt;aura-config-provision&lt;/code&gt; repository. See the &lt;a href=&#34;https://github.com/Telefonica/aura-config-provision/blob/master/%5Bob%5D/presets/gvp-retrieve-preset.json&#34;&gt;TV LLM Search Preset&lt;/a&gt; (notice that in the url, the field [ob] needs to be replaced by [es] or [br])
LLM use cases have been designed to provide a fallback mechanism for user requests that currently return a &amp;lsquo;None&amp;rsquo; intent or zero results, offering a second chance for classification and response generation.&lt;/p&gt;
&lt;h3 id=&#34;intents&#34;&gt;Intents&lt;/h3&gt;
&lt;p&gt;Once the triage has classified the user&amp;rsquo;s petition under the intent &lt;code&gt;intent.tv.retrieve&lt;/code&gt;, the user&amp;rsquo;s petition can be further classified into the following intents or UCs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;intent.tv.recommend&lt;/code&gt;: This intent will be returned when the user seeks TV content recommendations and explicitly refers to entities such as genres, subgenres, titles, sports-related content, directors, or actors. Example: &amp;ldquo;¿Qué documentales me recomiendas?&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;intent.tv.retrieve&lt;/code&gt;: This intent will be returned when the user is searching for either generic or specific TV content. Example: &amp;ldquo;Muestra películas dirigidas por Quentin Tarantino&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;intent.tv.none&lt;/code&gt;: This intent will be returned for any request that is not covered by the two use cases outlined above. Examples: &amp;ldquo;Cambia a Telecinco&amp;rdquo;, &amp;ldquo;Avanza 5 minutos&amp;rdquo;, &amp;ldquo;Pon una alarma&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;entities&#34;&gt;Entities&lt;/h3&gt;
&lt;p&gt;Three different entities can be returned if mentioned by the user:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;entities.channel&lt;/code&gt;: This entity will be returned whenever there is a mention of a TV channel or a third-party TV platform in the user&amp;rsquo;s request.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;entities.person&lt;/code&gt;: This entity will be returned whenever a proper name belonging to an actor, actress, director, driver, boxer, or other public figure is mentioned in the user&amp;rsquo;s request.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;entities.query&lt;/code&gt;: This entity will be returned when any relevant information for performing a search on the platform is mentioned in the user&amp;rsquo;s request. (e.g., TV titles, genres, subgenres)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;llm-output-format&#34;&gt;LLM output format&lt;/h3&gt;
&lt;p&gt;In the output format, the only mandatory field is that of the intent.
Entities are optional, as they may or may not be mentioned in the user&amp;rsquo;s request. If multiple values are present for an entity type, values must be separated by a double pipe &amp;ldquo;||&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Examples:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Input&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;Pon películas de Netflix de Almodovar y Tarantino&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{&amp;quot;intent&amp;quot;: &amp;quot;intent.tv.retrieve&amp;quot;, &amp;quot;entities.channel&amp;quot;: &amp;quot;Netflix&amp;quot;, &amp;quot;entities.person&amp;quot;: &amp;quot;Almodovar||Tarantino&amp;quot;, &amp;quot;entities.query&amp;quot;: &amp;quot;películas&amp;quot;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;Pon la película Titanic&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{&amp;quot;intent&amp;quot;: &amp;quot;intent.tv.retrieve&amp;quot;, &amp;quot;entities.query&amp;quot;: &amp;quot;película||Titanic&amp;quot;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;Pon antena 3&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{&amp;quot;intent&amp;quot;: &amp;quot;intent.tv.none&amp;quot;, &amp;quot;entities.channel&amp;quot;: &amp;quot;antena 3&amp;quot;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;¿Qué películas de acción me recomiendas?&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{&amp;quot;intent&amp;quot;: &amp;quot;intent.tv.recommend&amp;quot;, &amp;quot;entities.query&amp;quot;: &amp;quot;películas||acción&amp;quot;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

      </description>
    </item>
    
  </channel>
</rss>
