<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-conversational-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-conversational-search-llm/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>Docs: </title>
      <link>/docs/components/global-use-cases/ai-use-cases/tv-conversational-search-llm/tv-conversational-search-dialog/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      
      <guid>/docs/components/global-use-cases/ai-use-cases/tv-conversational-search-llm/tv-conversational-search-dialog/</guid>
      <description>
        
        
        

&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;
&lt;p&gt;Description of Aura bot &lt;em&gt;&lt;strong&gt;conversational-search-dialog&lt;/strong&gt;&lt;/em&gt;, that is specifically designed to resolve the advanced TV recommendation using LLMs in &lt;em&gt;&lt;strong&gt;ATRIA&lt;/strong&gt;&lt;/em&gt; and complex logic resolution.&lt;/p&gt;

&lt;/div&gt;

&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;The &lt;em&gt;&lt;strong&gt;conversational-search-dialog&lt;/strong&gt;&lt;/em&gt; is specifically designed to resolve the advanced recommendation, using LLMs in &lt;em&gt;&lt;strong&gt;ATRIA&lt;/strong&gt;&lt;/em&gt;. Specifically the LLM configured for TV Conversational Search UC.&lt;/p&gt;
&lt;p&gt;You can check its source code in Github:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Telefonica/packages/generic-ai/src/dialogs/conversational-search-dialog.ts&#34;&gt;conversational-search-dialog.ts&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/Telefonica/packages/generic-ai/src/dialogs/v3/conversational-search-v3-dialog.ts&#34;&gt;conversational-search-v3-dialog.ts&lt;/a&gt;.
Currently, this dialog is available for Aura channelData V1 and V3 versions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For this use case, the required specific configuration is set below:&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;channelDataVersion&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;v3&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#8f5902;font-style:italic&#34;&gt;// Only in Aura channelData V3 version
&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:#8f5902;font-style:italic&#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;conversational-search-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;allowAnonymous&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&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.conversational.search&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;core:flc.answer.error&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;needTvResolution&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&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:#204a87;font-weight:bold&#34;&gt;&amp;#34;bypass&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;duration&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;60&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;payloadName&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;openai&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;initialData&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;recognizersEnabled&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;true&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;recognizersBreakIntents&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;intent.tv.display&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;intent.navigation.section_show&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:#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;h2 id=&#34;specific-values&#34;&gt;Specific values&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Key&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Value&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;bypass.duration&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;60 (minutes)&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;This value overwrites the default &lt;em&gt;&lt;strong&gt;aura-bot&lt;/strong&gt;&lt;/em&gt; value for bypass lasting 10 minutes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;bypass.payloadName&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;openai&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Name of the interface that will be used as bypass payload for this dialog.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;bypass.initialData&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;empty&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;It should contain any data needed by the dialog to be initialized.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;bypass.recognizersEnabled&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;true&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;This value overwrites the default &lt;em&gt;&lt;strong&gt;aura-bot&lt;/strong&gt;&lt;/em&gt; way of working with recognizers when it is in bypass mode. If it is set to &lt;code&gt;true&lt;/code&gt;, recognizers are executed, and their result is stored in the bypass payload to be used, if needed, afterwards.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;bypass.recognizersBreakIntents&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Array of intents&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Used to handle when the user requested any other use case during the execution of the TV Conversational Search UC.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;configuration-by-channel&#34;&gt;Configuration by channel&lt;/h2&gt;
&lt;p&gt;For this dialog it is necessary to add the configuration of applicationId and presetId per channel and intent in the &lt;a href=&#34;../../../../../docs/components/channels/current-channel-model/#atria-model&#34;&gt;channel model&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For this use case, the required specific configuration per channel is set below:&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;atria&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;dialogs&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;intent.conversational.search&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;applicationId&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;816bdab6-3ea3-4a77-bdea-12945d6d7053&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;presetId&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;acdef02f-f810-4474-8143-6b2a04a042f8&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;h2 id=&#34;environment-variables&#34;&gt;Environment variables&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Property&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Mandatory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AURA_AUTHORIZATION_HEADER&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Authorization header to be sent to &lt;code&gt;AURA_GATEWAY_API_ENDPOINT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AURA_COMPLEX_LOGIC_ENDPOINT&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;URL of &lt;strong&gt;Complex Logic&lt;/strong&gt; endpoint to interact with resolution API.&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AURA_GATEWAY_API_ENDPOINT&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;URL of &lt;strong&gt;Aura Gateway API&lt;/strong&gt; endpoint&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AURA_GATEWAY_API_ISSUER_URL&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Issuer URL for token info&lt;/td&gt;
&lt;td&gt;yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AURA_CHANNELDATA_DEFAULT_VERSION&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Default version of channelData. By default &lt;code&gt;1.0.0&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AURA_CHANNELDATA_LA_DEFAULT_VERSION&lt;/td&gt;
&lt;td&gt;string&lt;/td&gt;
&lt;td&gt;Default version of channelData for Latin America. By default &lt;code&gt;2.0.0&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CONVERSATIONAL_SEARCH_MAX_TAGS&lt;/td&gt;
&lt;td&gt;number&lt;/td&gt;
&lt;td&gt;Default number of max tags to manage in the dialog. By default &lt;code&gt;4&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CONVERSATIONAL_SEARCH_TAGS_SCORE_THRESHOLD&lt;/td&gt;
&lt;td&gt;number&lt;/td&gt;
&lt;td&gt;Default number with minimum score threshold required for a tag to be considered relevant in a TV Conversational Search. Value of this variable oscillates between 0 and 1. By default &lt;code&gt;0&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;how-it-works&#34;&gt;How it works&lt;/h2&gt;
&lt;h3 id=&#34;steps&#34;&gt;Steps&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The dialog starts by init bypass mode.&lt;/li&gt;
&lt;li&gt;Then, it checks if the iteration comes from the Triage recognizer, by setting the user&amp;rsquo;s text to the fixed phase of resource: &lt;code&gt;tv-conversational-search:command.recommend&lt;/code&gt;  and then calling the AI ​​service.&lt;/li&gt;
&lt;li&gt;If the iteration originated because there were no results, it will return the text obtained from the resource: &lt;code&gt;tv-conversational-search:command.no-results&lt;/code&gt; to the user.&lt;/li&gt;
&lt;li&gt;Then, it calls the AI service to get a generative response based on the intent and the current session ID. The session ID is updated in the context for future requests.&lt;/li&gt;
&lt;li&gt;Next, with the response obtained from the LLM, the user will be composed of the following:
&lt;ul&gt;
&lt;li&gt;If the generative response returns command info, It will be checked if the command is &lt;code&gt;EXIT&lt;/code&gt; so the bypass will be closed and the resource: &lt;code&gt;tv-conversational-search:command.exit&lt;/code&gt; will be returned to the user.&lt;/li&gt;
&lt;li&gt;If the generative response returns tags info, it calls the complex logic service to get a resolution based on the intent and tags from the generative response. If the tags are not valid or not meet a threshold or there are no results, the resource will be returned: &lt;code&gt;tv-conversational-search:command.no-results&lt;/code&gt;. Instead, ff content exists, it will be returned in the channel data, but the text of the result shown to the user will always be the one obtained from generative response.&lt;/li&gt;
&lt;li&gt;If the generative response returns text info, this text is included in response of user, unless there are no results, as we indicated in the previous paragraph, a specific resource will be returned.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Finally, it sends the activity to the user and ends the dialog.&lt;/li&gt;
&lt;li&gt;The bypass will only be closed if these two conditions are met:
&lt;ul&gt;
&lt;li&gt;The &amp;lsquo;EXIT&amp;rsquo; command is detected.&lt;/li&gt;
&lt;li&gt;A new user intent configured that match those configured in the dialog in field: &lt;code&gt;recognizersBreakIntents&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;sequence-diagram&#34;&gt;Sequence diagram&lt;/h3&gt;
&lt;pre class=&#34;mermaid&#34;&gt;sequenceDiagram
    autonumber
    participant User
    participant Dialog
    participant AI Services
    participant Complex Logic

    Dialog-&amp;gt;&amp;gt;Dialog: Open dialog 
    Dialog-&amp;gt;&amp;gt;Dialog: Init bypass mode and check interaction origin
    alt interaction origin is no-results
        Dialog-&amp;gt;&amp;gt;User: Send activity to user with command no-results text
        Dialog-&amp;gt;&amp;gt;Dialog: End dialog
    else interaction origin is triage
        Dialog-&amp;gt;&amp;gt;Dialog: set text to send LLM with command recommend.
    end
    Dialog-&amp;gt;&amp;gt;Dialog: continue bypass
    alt user intent recognized match with break intent configured
        Dialog-&amp;gt;&amp;gt;Dialog: Close bypass
        Dialog-&amp;gt;&amp;gt;User: Send activity to user with command exit text
    else user intent is not break intent configured
        Dialog-&amp;gt;&amp;gt;Dialog: continue bypass
        Dialog-&amp;gt;&amp;gt;AI Services: Call AI service with intent and session ID
        AI Services-&amp;gt;&amp;gt;Dialog: Return generative response and session ID
        alt generative response contains a &amp;#39;EXIT&amp;#39; command
            Dialog-&amp;gt;&amp;gt;Dialog: Close bypass
            Dialog-&amp;gt;&amp;gt;User: Send activity to user with command exit text
            Dialog-&amp;gt;&amp;gt;Dialog: End dialog
        else generative response contains tags
            alt tags are valid
                Dialog-&amp;gt;&amp;gt;Complex Logic: Call complex logic service with intent and tags
                Complex Logic-&amp;gt;&amp;gt;Dialog: Return resolution
                alt No content found in resolution
                    Dialog-&amp;gt;&amp;gt;User: Send activity to user with command no-results text
                else Content found
                    Dialog-&amp;gt;&amp;gt;User: Send activity to user with text of generative response and resolution
                end
            else tags are invalid
                Dialog-&amp;gt;&amp;gt;User: Send activity to user with command no-results text
            end
        else generative response contains text
                Dialog-&amp;gt;&amp;gt;User: Send activity to user with text of generative response
        end
    end
    Dialog-&amp;gt;&amp;gt;Dialog: End dialog&lt;/pre&gt;

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


&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;
&lt;p&gt;Complex Logic Framework plugin for the TV Conversational Search use case&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 Conversational Search plugin&lt;/strong&gt; resolves requests from a user to obtain personalized recommendations for 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.conversational.search&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_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;Example:
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;(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;li&gt;&lt;code&gt;order&lt;/code&gt;: &lt;code&gt;personal&lt;/code&gt;&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.conversational.search.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;&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.conversational.search.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; 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.conversational.search.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: list of items&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.conversational.search.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 Recommend plugin&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.conversational.search.no-results&lt;/code&gt; → no content found&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tv:video.conversational.search.by-default.simple-result&lt;/code&gt; → one non-live result&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tv:video.conversational.search.multiple-results&lt;/code&gt; → multiple results&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tv:video.conversational.search.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;em&gt;“Recommend me something”&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;for a single live channel result → &lt;code&gt;CHANNEL.PLAY&lt;/code&gt; tune channel with live channel.&lt;/li&gt;
&lt;li&gt;for a multiple results → &lt;code&gt;MEDIA.SEARCH&lt;/code&gt; with &lt;code&gt;tv:video.conversational.search.multiple-results&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;for any results → &lt;code&gt;tv:video.conversational.search.no-results&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

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


&lt;div class=&#34;pageinfo pageinfo-primary&#34;&gt;
&lt;p&gt;Resources used by the TV LLM Conversational 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 Conversational 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-conversational-search&#34;&gt;Specific resources for the use case: tv-conversational-search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;specific-resources-for-the-use-case-tv-llm-conversational-search&#34;&gt;Specific resources for the use case: TV LLM Conversational Search&lt;/h2&gt;
&lt;p&gt;In case the LLM Conversational Search does not return the text to be shown to the user, the resources from TV Conversational Search plugin would be used&lt;/p&gt;
&lt;p&gt;The resources associated to &lt;em&gt;&lt;strong&gt;aura-bot&lt;/strong&gt;&lt;/em&gt; are defined below:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Specific resources for TV LLM Conversational 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-conversational-search:command.exit&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when the user sends a message to stop the dialog and launch a different UC&lt;/td&gt;
&lt;td&gt;Entendido. Recuerda que puedes volver a probarlo diciendo &amp;ldquo;Recomendador avanzado&amp;quot;&lt;/td&gt;
&lt;td&gt;conversational-search dialog&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-conversational-search:command.close.words&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when the user sends a message to stop the dialog. By default, it is not configured.&lt;/td&gt;
&lt;td&gt;Salir, cerrar, goodbye, exit, quit&lt;/td&gt;
&lt;td&gt;conversational-search dialog dialog&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-conversational-search:command.no-results&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned in case there is no results&lt;/td&gt;
&lt;td&gt;Ahora mismo no encuentro resultados, pero si me dices un género o tu estado de ánimo te sugiero algo.&lt;/td&gt;
&lt;td&gt;conversational-search dialog&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-conversational-search:command.recommend&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource used to call the LLM with a fixed phrase when the request comes from triage&lt;/td&gt;
&lt;td&gt;Recomendación avanzada&lt;/td&gt;
&lt;td&gt;conversational-search dialog&lt;/td&gt;
&lt;td&gt;Use case-specific&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The resources associated to the TV LLM Conversational 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 Conversational 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.conversational.by-default.simple-result&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when finds one result as recommendation&lt;/td&gt;
&lt;td&gt;Here is a suggestion&lt;/td&gt;
&lt;td&gt;tv.recommend 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.conversational.multiple-results&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when finds more than one result as recommendation&lt;/td&gt;
&lt;td&gt;Here are some suggestions&lt;/td&gt;
&lt;td&gt;tv.recommend 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.conversational.display.single-result&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when one live channel is recommended and starts playback&lt;/td&gt;
&lt;td&gt;Tuning to channel&lt;/td&gt;
&lt;td&gt;tv.recommend 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.conversational.no-results&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Resource returned when does not find any result as recommendation&lt;/td&gt;
&lt;td&gt;Nothing found&lt;/td&gt;
&lt;td&gt;tv.recommend 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-conversational-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-conversational-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-conversational-search-preset.json&#34;&gt;TV LLM Conversational 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 are not currently understood, i.e. return a &amp;lsquo;None&amp;rsquo; intent, or when no content is found in the video platform related to it, offering a second chance for classification and response generation.&lt;/p&gt;
&lt;h3 id=&#34;intent&#34;&gt;Intent&lt;/h3&gt;
&lt;p&gt;The Conversational Search use case has different invocation points:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;From triage: when the LLM identifies that the user&amp;rsquo;s intention is to perform an open search or to get an advanced recommendation (&amp;ldquo;Recomiéndame algo para ver&amp;rdquo;, &amp;ldquo;Quiero ver algo divertido&amp;rdquo;, &amp;ldquo;Ponme con el recomendador&amp;rdquo;)&lt;/li&gt;
&lt;li&gt;Fallback for the TV Search deterministic use case and for the TV LLM Search UC for user&amp;rsquo;s requests with 0 results or KO.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Once the user&amp;rsquo;s request is classified under &lt;code&gt;intent.conversational.search&lt;/code&gt;, the user will enter into a conversation with the LLM Conversational Search agent. During this conversation, the agent will attempt to refine the user&amp;rsquo;s search criteria to try to lead the user to content that is available on the platform according to the available thematic categories also called tags (e.g., &amp;ldquo;Amor imposible&amp;rdquo;, &amp;ldquo;Persecuciones&amp;rdquo;, &amp;ldquo;Psicópatas&amp;rdquo;).&lt;/p&gt;
&lt;p&gt;The conversation can be ended through various means:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;By breaking intents:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;ES: &lt;code&gt;intent.tv.display&lt;/code&gt; (contents &amp;amp; channels) and &lt;code&gt;intent.navigation.section_show&lt;/code&gt; (sections, apps&amp;hellip;)&lt;/li&gt;
&lt;li&gt;BR: &lt;code&gt;intent.tv.display&lt;/code&gt; (channels), &lt;code&gt;intent.tv.app_open&lt;/code&gt; (apps/third party platforms) and &lt;code&gt;intent.navigation.section_show&lt;/code&gt; (sections)&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;
&lt;p&gt;By breaking command: &lt;code&gt;EXIT&lt;/code&gt; (&amp;ldquo;Salir&amp;rdquo;, &amp;ldquo;Abandonar&amp;rdquo;, &amp;ldquo;Quiero irme ya&amp;rdquo;, &amp;ldquo;Eu quero sair daqui&amp;rdquo;, &amp;ldquo;Terminei&amp;rdquo;)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When the user clicks on one of the contents that appears on the screen in response to their request&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;llm-output-format&#34;&gt;LLM output format&lt;/h3&gt;
&lt;p&gt;In the output format, the identified categories, their score, and the text for the user will be included without exceeding the 115-character limit.
The number of tags will vary depending on different cases:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Returning 0 when it is identified that the user wants to leave the conversation (breaking command)&lt;/li&gt;
&lt;li&gt;Returning 1 when the category mentioned by the user matches one from the available list&lt;/li&gt;
&lt;li&gt;Returning 3 for cases such as:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;No categories are identified in the user&amp;rsquo;s request&lt;/li&gt;
&lt;li&gt;The user wants to see the full list of categories or any recommendation in general&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The list of thematic categories is configured within the field &lt;code&gt;tags&lt;/code&gt; in the preset (in &lt;code&gt;args&lt;/code&gt;) with a format of comma-separated items enclosed in square brackets ([tag1, tag2, tag3, tag4&amp;hellip;]).&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;Suficiente, quiero salir&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{&amp;quot;name&amp;quot;: &amp;quot;llm_conversational_search&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;command&amp;quot;: &amp;quot;EXIT&amp;quot;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;Me apetece ver algo de amor&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{&amp;quot;name&amp;quot;: &amp;quot;llm_conversational_search&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;text&amp;quot;: &amp;quot;Aquí tienes algo sobre la temática: Amor&amp;quot;, &amp;quot;command&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;tags&amp;quot;:[{ &amp;quot;tag&amp;quot;: &amp;quot;Amor&amp;quot;, &amp;quot;score&amp;quot;: 0.98 }]}}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;Me gustaría ver contenido de aviones&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{&amp;quot;name&amp;quot;: &amp;quot;llm_conversational_search&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;text&amp;quot;: &amp;quot;No he encontrado nada relacionado pero puedes explorar categorías como: Épico, Bélico o Crimen fallido&amp;quot;, &amp;quot;command&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;tags&amp;quot;:[{ &amp;quot;tag&amp;quot;: &amp;quot;Épico&amp;quot;, &amp;quot;score&amp;quot;: 0.98 }, { &amp;quot;tag&amp;quot;: &amp;quot;Bélico&amp;quot;, &amp;quot;score&amp;quot;: 0.92 }, { &amp;quot;tag&amp;quot;: &amp;quot;Crimen fallido&amp;quot;, &amp;quot;score&amp;quot;: 0.89}]}}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;ldquo;¿Qué categorías tienes disponibles?&amp;rdquo;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;{&amp;quot;name&amp;quot;: &amp;quot;llm_conversational_search&amp;quot;, &amp;quot;arguments&amp;quot;: {&amp;quot;text&amp;quot;: &amp;quot;Estas son algunas de las categorías que puedes explorar: Amor, Crisis de pareja o Reencuentros amorosos&amp;quot;,&amp;quot;command&amp;quot;: &amp;quot;&amp;quot;, &amp;quot;tags&amp;quot;:[{ &amp;quot;tag&amp;quot;: &amp;quot;Amor&amp;quot;, &amp;quot;score&amp;quot;: 0.93 }, { &amp;quot;tag&amp;quot;: &amp;quot;Crisis de pareja&amp;quot;, &amp;quot;score&amp;quot;: 0.87 }, { &amp;quot;tag&amp;quot;: &amp;quot;Reencuentros amorosos&amp;quot;, &amp;quot;score&amp;quot;: 0.77 }]}}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

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