CoolFace
Apppublic

universalsoftware/uchat

sourceHugging Facemitupdated 8mo agoView on Hugging Face
2likes
views.py625 linesDownload Raw Back to bot
1import bot.uchat2from django.shortcuts import render3from .models import Language, Query, ParamModelForm, Param4from bot.forms import RenewBotForm, EditorForm, EditorListForm, ParamForm, ImportForm5from django.shortcuts import get_object_or_4046from django.http import HttpResponseRedirect7from django.urls import reverse8import datetime9from django.db import transaction10from openai import OpenAI11from django.contrib.auth.decorators import login_required, permission_required12import json13 14#bot.uchat.chroma_client.allow_reset = True15 16class chat(object): 17 ns = cs = "s0"18 reply = ctx = ""19 messages = context = []20 ctx_flag = True21 previous = ""22 oc = bot.uchat.oc23 def get_reply(self,jezik,query,max_results,flag):24  msg = query # + "Objasnite na " + jezik + ", "25  query_results = bot.uchat.collection.query(26     query_texts = [ msg ],27     n_results = max_results,28     where = { "$and": [ {"$and": [ { "$or": [ {"state": self.cs },  { "page": { "$nin": [ -1 ] } } ] } , { "used": False } ] } ,29               {"lang": jezik } ] },30  )31  if bot.uchat.DEBUG: print("Query results:\n", query_results, "jezik:", jezik)32  ln = len(query_results["documents"][0])33  if ln == 0:34      if bot.uchat.DEBUG: print("Odaberite drugi jezik")35      bot.uchat.collection.update(36         ids=[f"id{id}" for id in range(bot.uchat.collection.count())],37         metadatas=[{"used": False} for i in range(bot.uchat.collection.count())],38      )39      if len(self.messages)>0: self.messages = self.messages[0]40      new = reply = "Kako Vam još mogu pomoći?"41      self.ctx_flag = True42      self.ns = self.cs = "s0"43      return new44  else:45    context = []46    i_state = l_state = -147    for n in range(ln):48       if query_results["distances"][0][n] < (0.05+(bot.uchat.max_distance+bot.uchat.min_distance)/2):49          context += [ query_results["documents"][0][n] ]50          if i_state<0:51             l_state += 152             if query_results["metadatas"][0][n]['state'] != 'None':53                i_state = n54       else:55          if (query_results["metadatas"][0][n]['state'] != 'None') and (i_state<0):56             i_state = n57    if l_state<0:58       l_state = i_state = 059       ctx = query_results["documents"][0][0] 60       if self.cs != 'None':61          for n in range(1,len(context)): ctx +=  ", " + context[n]62    else:63       ctx = context[l_state]64       for n in range(len(context)):65          if l_state != n:66             ctx +=  ", " + context[n]67    ctx += "."68  match jezik:69     case 'hrvatski':70        o_jezik = 'hrvatskom'71     case 'slovenački':72        o_jezik = 'slovenačkom'73     case 'srpski':74        o_jezik = 'srpskom'75     case 'makedonski':76        o_jezik = 'makedonskom'77  if query_results["documents"][0][i_state]=="###":78    self.ctx_flag = False79    new = reply = "Kako Vam još mogu pomoći?"80    if bot.uchat.DEBUG: print("!!!###!!!")81    return "Ne razumem, ili je u pitanju greška."82  else:83    if ((query_results["distances"][0][i_state] > bot.uchat.max_distance)) and (self.cs == 'None'):84       self.ctx_flag = False85       if bot.uchat.DEBUG: print("Malo je nejasno šta je problem..")86       bot.uchat.collection.update(87          ids=[f"id{id}" for id in range(bot.uchat.collection.count())],88          metadatas=[{"used": False} for i in range(bot.uchat.collection.count())],89       )90       if len(messages)>0: messsages = messages[0]91       reply = "Malo je nejasno šta je problem - kako Vam još mogu pomoći?"92       self.ns = self.cs = "s0"93       return reply94    elif (query_results["distances"][0][i_state] < bot.uchat.min_distance):95       if self.cs != "None":96          self.ctx_flag = False97       else:98          self.ctx_flag = True99       new = reply=query_results["documents"][0][i_state]100    else:101       self.ctx_flag = True102       # reply=query_results["documents"][0][i_state]103    if (len(msg) < bot.uchat.min_len/4) or flag: self.ctx_flag = False104    id = query_results["ids"][0]105    meta = query_results["metadatas"][0]106    # ovo treba usloviti potrebnom input var ako treba107    if (meta[i_state]["state"] not in ['','s99']): meta[0]["used"] = True108    bot.uchat.collection.update( ids=id, metadatas=meta)109    self.ns = query_results["metadatas"][0][i_state]["next"]110    if self.messages==[]:111       self.messages = [ {"role": "system", "content": bot.uchat.system[jezik]} ]112       new_message = {"role": "user", "content": f"{msg} " + bot.uchat.msg_content[jezik] + " " + ctx + ". "}113    else:114       if self.ctx_flag:115          new_message = {"role": "user", "content": f"{msg}. " + bot.uchat.msg_content[jezik] + " " + ctx + ". "}116       else:117          new_message = {"role": "user", "content": f"{msg}."}118    self.messages.append(new_message)119    print("messages=", self.messages)120    if query_results["distances"][0][i_state] > bot.uchat.min_distance:121       completion = bot.uchat.oc.chat.completions.create(122          model = bot.uchat.model_id,123          messages=self.messages,124          temperature=bot.uchat.temperature,125          max_tokens=bot.uchat.max_tokens,126          top_p=bot.uchat.top_p,127          frequency_penalty=bot.uchat.frequency_penalty,128          presence_penalty=bot.uchat.presence_penalty,129          stop=["###","<|","|im_end|","|im_start|"],130          #   do_sample=True,131       )132       if bot.uchat.DEBUG: print('msg=' + new_message['content'] + "\nMessages:\n", self.messages, flush=True)133       new_message = {"role": "assistant", "content": ""}134       new=completion.choices[0].message.content135       if new==self.previous:136          if bot.uchat.DEBUG: print("Same!!!")137          bot.uchat.collection.update(138             ids=[f"id{id}" for id in range(bot.uchat.collection.count())],139             metadatas=[{"used": False} for i in range(bot.uchat.collection.count())],140          )141          new_message["content"] = new = self.previous = reply = "Kako Vam još mogu pomoći?"142          self.ns = self.cs = "s0"143          self.messages = self.messages[0]144       else:145          new_message["content"] += completion.choices[0].message.content146          self.previous = new_message["content"]147          if bot.uchat.DEBUG: print(new, end="", flush=True)148    else:149       new_message = {"role": "assistant", "content": ""}150       new_message["content"] = reply151       new = reply152    self.messages.append(new_message)153    # Prevođenje na druge jezike:154    #match o_jezik:155    #   case 'srpskom':156    #       pass157    #   case _ :158    #       new_message = {"role": "user", "content": f"Napiši to na {o_jezik} jeziku."}159    #       self.messages.append(new_message)160    #       completion = bot.uchat.oc.chat.completions.create(161    #          model = bot.uchat.model_id,162    #          messages=self.messages,163    #          temperature=bot.uchat.temperature,164    #          max_tokens=bot.uchat.max_tokens,165    #          top_p=bot.uchat.top_p,166    #          frequency_penalty=bot.uchat.frequency_penalty,167    #          presence_penalty=bot.uchat.presence_penalty,168    #          stop=None,169    #          #   do_sample=True,170    #       )171    #       new=completion.choices[0].message.content172    #       new_message = {"role": "user", "content": new}173    #       self.messages.append(new_message)174    if (self.ns!='None'):175      if (self.ns != self.cs): self.cs=self.ns 176  if self.cs=='None': self.cs='s0' ; self.ctx_flag = False177  return new178 179def selected(jez,str):180    if jez==str:181       return 'selected'182    else:183       return ' '184 185def index(request):186    #num_books = Book.objects.all().count()187    # Number of visits to this view, as counted in the session variable.188    chat_inst = chat()189    request.session.set_expiry(300)190    jezik = request.session.get('jezik', 'srpski')191    num_visits = request.session.get('num_visits', 1)192    if num_visits == 0:193        if bot.uchat.DEBUG: print("Debug: ")194    request.session['num_visits'] = num_visits+1195    reply = request.session.get("replies", "Zdravo, kako Vam mogu pomoći?")196    if request.method == 'POST':197        # Create a form instance and populate it with data from the request (binding):198        form = RenewBotForm(request.POST)199        if form.is_valid():200           request.session['query'] = query = form.cleaned_data['query']201           jezik = form.cleaned_data['jezik']202           request.session['jezik'] = jezik203           nr =  bot.uchat.max_results if num_visits < bot.uchat.max_results else 1+(num_visits % 2)204           #iif len(chat_inst.messages)>0:205           #    request.session['messages'] = chat_inst.messages if num_visits % 2 == 1 else chat_inst.messages[0:0]206           chat_inst.messages = request.session.get('messages',[])207           chat_inst.cs = request.session.get('cs','s0')208           chat_inst.ns = request.session.get('ns','s0')209           if bot.uchat.max_conv < len(chat_inst.messages):210              new_reply = chat_inst.get_reply(jezik, query, nr, True)211           else:212              new_reply = chat_inst.get_reply(jezik, query, nr, False)213           request.session['messages'] = chat_inst.messages214           request.session['ns'] = chat_inst.ns215           request.session['cs'] = chat_inst.cs216           request.session['replies'] = reply + "\nKorisnik: " + query + "\n\nOdgovor: " + new_reply + "\n"217#           q = QueryForm(request.POST)218           return HttpResponseRedirect(reverse("index"))219        else:220           if bot.uchat.DEBUG: print("Invalid form!", form.errors)221    else:222        form = RenewBotForm(initial={'query': 'Neki upit:'})223        query = request.session.get('query','...')224        jezik = request.session.get('jezik','srpski')225        #if len(chat_inst.messages)>0:226        #    request.session['messages'] = chat_inat.messages227        #else:228        #    request.session['messages'] = []229        return render(230        request,231        'index.html',232        context={233                 'num_visits': num_visits,234                 'reply': reply,235                 'selected_hr': selected(jezik,'hrvatski'),236                 'selected_sl': selected(jezik,'slovenački'),237                 'selected_sr': selected(jezik,'srpski'),238                 'selected_mk': selected(jezik,'makedonski'),239                }240    )241 242def reset(request):243    chat().messages = request.session.get('messages',[])244    chat().cs = "s0"245    chat().ns = "s0"246    chat().oc.close()247    bot.uchat.oc = oc = OpenAI(base_url="http://localhost:4891/v1", api_key="not-needed")248    ids = bot.uchat.collection.get()['ids']249    for id in ids: bot.uchat.collection.update(ids=[id], metadatas=[{'used': False}])250    jezik = request.session.get('jezik','srpski')251    request.session.flush()252    request.session['num_visits'] = 0253    return render(254        request,255        'index.html',256        context = {'num_visits': 0,257                   'reply': 'Kako Vam mogu još pomoći?',258                 'selected_hr': selected(jezik,'hrvatski'),259                 'selected_sl': selected(jezik,'slovenački'),260                 'selected_sr': selected(jezik,'srpski'),261                 'selected_mk': selected(jezik,'makedonski'),262                }263        )264 265def editor(request):266    #pagesize = 10267    if request.method == "POST":268        form = EditorListForm(request.POST)269        form.is_valid()270        try:271           request.session['id'] = f_id = form.cleaned_data['f_id']272        except:273           request.session['id'] = f_id = ""274        try:275           request.session['state'] = f_state = form.cleaned_data['f_state']276        except:277           request.session['state'] = f_state = ""278        try:279           request.session['next'] = f_next = form.cleaned_data['f_next']280        except:281           request.session['next'] = f_next = ""282        try:283           request.session['page'] = f_page = form.cleaned_data['f_page']284        except:285           request.session['page'] = f_page = ""286        try:287           request.session['jezik'] = f_jezik = form.cleaned_data['f_jezik']288        except:289           request.session['jezik'] = f_jezik = ""290        try:291           request.session['docu'] = f_docu = form.cleaned_data['f_docu']292        except:293           request.session['docu'] = f_docu = ""294        return HttpResponseRedirect(reverse('bot'))295    else:296       f_jezik = jezik = request.session.get('jezik','')297       f_state = request.session.get('state','')298       f_next = request.session.get('next','')299       f_page = request.session.get('page','')300       f_docu = request.session.get('docu','')301       f_id = request.session.get('id','')302       meta = {}303       if f_state != "":304              meta = {"state": f_state}305       if f_next != "":306          if meta == {}:307              meta = {"next": f_next}308          else:309              meta = { "$and": [ meta, {"next": f_next} ] }310       if f_page !="":311          if meta == {}:312              meta = {"page": f_page}313          else:314              meta = { "$and": [ meta , {"page": f_page} ] }315       if f_jezik != "":316           if meta == {}:317              meta = {"lang": f_jezik}318           else:319              meta = { "$and": [ meta, {"lang": f_jezik} ] }320       if f_id == "":321           if f_docu =="":322               ids = bot.uchat.collection.get(where=meta)['ids']323               documents = bot.uchat.collection.get(where=meta)['documents']324               states = bot.uchat.collection.get(where=meta)['metadatas']325           else:326               ids = bot.uchat.collection.get(where=meta, where_document={"$contains": f_docu })['ids']327               documents = bot.uchat.collection.get(where=meta, where_document={"$contains": f_docu })['documents']328               states = bot.uchat.collection.get(where=meta, where_document={"$contains": f_docu })['metadatas']329       else:330           if f_docu == "":331               ids = bot.uchat.collection.get(ids=[f'id{f_id}'], where=meta)['ids']332               documents = bot.uchat.collection.get(ids=[f'id{f_id}'], where=meta)['documents']333               states = bot.uchat.collection.get(ids=[f'id{f_id}'], where=meta)['metadatas']334           else:335               ids = bot.uchat.collection.get(ids=[f'id{f_id}'], where=meta, where_document={"$contains": f_docu })['ids']336               documents = bot.uchat.collection.get(ids=[f'id{f_id}'], where=meta, where_document={"$contains": f_docu })['documents']337               states = bot.uchat.collection.get(ids=[f'id{f_id}'], where=meta, where_document={"$contains": f_docu })['metadatas']338       cnt = 0339       nr = len(documents)340       id_docs = []341       for doc in documents:342            try:343                lang = states[cnt]['lang']344            except:345                lang = "srpski"346            id_docs += [ [ids[cnt], states[cnt]['state'], states[cnt]['next'], states[cnt]['page'], lang, doc] ]347            cnt += 1348       id_docs.sort(key=lambda k: eval(k[0][2:]))349       return render(350           request,351           'index_editor.html',352           context = {'last': bot.uchat.last, 'nr': nr,353                 'id_docs': id_docs,354                 'documents': documents,355                 'id': "",356                 'selected_hr': selected(jezik,'hrvatski'),357                 'selected_sl': selected(jezik,'slovenački'),358                 'selected_sr': selected(jezik,'srpski'),359                 'selected_mk': selected(jezik,'makedonski'),360                 'f_id': f_id,361                 'f_state': f_state,362                 'f_next': f_next,363                 'f_page': f_page,364                 'f_docu': f_docu,365                 'f_jezik': f_jezik,366                }367        )368 369def get_id(coll):370    for i in range(coll.count()):371        id = coll.get(ids=f'id{i}')['ids']372        if id==[]:373            return i374    return coll.count()375 376def editor_id(request, pk, pk2):377    last = bot.uchat.last378    state = next = uris = ""379    used = False380    page = -1381    if request.method == "POST":382        form = EditorForm(request.POST)383        if form.is_valid():384            id = form.cleaned_data['id'][2:]385            state = form.cleaned_data['state']386            next = form.cleaned_data['next']387            used = json.loads(form.cleaned_data['used'].lower())388            page = form.cleaned_data['page']389            docu = form.cleaned_data['docu']390            source = form.cleaned_data['source']391            jezik = form.cleaned_data['jezik']392            #request.session['jezik'] = jezik393            meta = {'state': state, 'next': next, 'used': used, 'page': page, 'source': source, 'lang': jezik}394            try:395               if pk2==0:396                  bot.uchat.collection.update(397                      ids = f'id{pk}',398                      metadatas = meta,399                      documents = docu400                  )401                  return HttpResponseRedirect(reverse('bot')+f'{pk}/0')402               elif pk2==1:403                  if bot.uchat.last>1:404                      new = get_id(bot.uchat.collection)405                      bot.uchat.collection.add(406                          ids = f'id{new}',407                          metadatas = meta,408                          documents = docu409                      )410                      bot.uchat.last += 1411                  return HttpResponseRedirect(reverse('bot')+f'{new}/0')412               elif pk2==2:413                  bot.uchat.collection.delete(ids = f'id{pk}')414                  bot.uchat.last -= 1415                  return HttpResponseRedirect(reverse('bot'))416            except:417              if bot.uchat.DEBUG: print("Errors:", form.errors)418              return HttpResponseRedirect(reverse('bot'))419        else:420            if bot.uchat.DEBUG: print("Invalid form!", form.errors)421            return HttpResponseRedirect(reverse('bot')+f'{pk}/0')422    else:423       if last>0:424           doc = bot.uchat.collection.get(ids=[f'id{pk}'])425           state = doc['metadatas'][0]['state']426           next = doc['metadatas'][0]['next']427           used = doc['metadatas'][0]['used']428           page = doc['metadatas'][0]['page']429           docu = doc['documents'][0]430           source = doc['metadatas'][0]['source']431       try:432           jezik = doc['metadatas'][0]['lang']433       except:434           jezik = request.session.get('jezik','srpski')435       return render(436           request,437           'index_editor.html',438           context = {'last': bot.uchat.last, 'nr': "",439                 'state': state,440                 'next': next,441                 'used': used,442                 'page': page,443                 'docu': docu,444                 'source': source,445                 'id': pk,446                 'selected_hr': selected(jezik,'hrvatski'),447                 'selected_sl': selected(jezik,'slovenački'),448                 'selected_sr': selected(jezik,'srpski'),449                 'selected_mk': selected(jezik,'makedonski'),450                }451        )452 453def params_refresh(request):454    if request.method == "POST":455       form = ParamForm(request.POST)456       form.is_valid()457       request.session["jezik"] = form.cleaned_data['jezik']458       return HttpResponseRedirect(reverse('params'))459    else:460       return HttpResponseRedirect(reverse('params'))461 462def params(request):463    if request.method == "POST":464       form = ParamForm(request.POST)465       jezici = []466       edit_all = Param.objects.all()467       for edit in edit_all: jezici += [edit.jezik]468       mform = ParamModelForm(request.POST)469       try:470          form.is_valid()471          request.session["jezik"] = form.cleaned_data['jezik']472          jezik = request.session["jezik"]473          bot.uchat.ctxpre = form.cleaned_data['ctxpre']474       except:475          bot.uchat.ctxpre = ""476       try:477          bot.uchat.msg_content[jezik] = form.cleaned_data['msg_content']478       except:479          bot.uchat.msg_content[jezik] = ""480       try:481          bot.uchat.system[jezik] = form.cleaned_data['system']482          bot.uchat.min_len = form.cleaned_data['min_len']483          bot.uchat.CHUNK_SIZE = form.cleaned_data['CHUNK_SIZE']484          bot.uchat.CHUNK_OVERLAP = form.cleaned_data['CHUNK_OVERLAP']485          bot.uchat.max_results = form.cleaned_data['max_results']486          bot.uchat.EMBED_MODEL = form.cleaned_data['EMBED_MODEL']487          bot.uchat.model_id = form.cleaned_data['model_id']488          bot.uchat.max_conv = form.cleaned_data['max_conv']489          bot.uchat.min_distance = form.cleaned_data['min_distance']490          bot.uchat.max_distance = form.cleaned_data['max_distance']491          bot.uchat.temperature = form.cleaned_data['temperature']492          bot.uchat.max_tokens = form.cleaned_data['max_tokens']493          bot.uchat.top_p = form.cleaned_data['top_p']494          bot.uchat.frequency_penalty = form.cleaned_data['frequency_penalty']495          bot.uchat.presence_penalty = form.cleaned_data['presence_penalty']496          bot.uchat.DEBUG = json.loads(form.cleaned_data['DEBUG'].lower())497       except:498          if bot.uchat.DEBUG: print("Errors:", form.errors)499       if jezik in jezici:500          for edit in edit_all:501              if edit.jezik == jezik:502                 edit.system = bot.uchat.system[jezik]503                 edit.min_len = bot.uchat.min_len504                 edit.CHUNK_SIZE = bot.uchat.CHUNK_SIZE505                 edit.CHUNK_OVERLAP = bot.uchat.CHUNK_OVERLAP506                 edit.max_results = bot.uchat.max_results507                 edit.EMBED_MODEL = bot.uchat.EMBED_MODEL508                 edit.model_id = bot.uchat.model_id509                 edit.max_conv = bot.uchat.max_conv510                 edit.min_distance = bot.uchat.min_distance511                 edit.max_distance = bot.uchat.max_distance512                 edit.temperature = bot.uchat.temperature513                 edit.max_tokens = bot.uchat.max_tokens514                 edit.top_p = bot.uchat.top_p515                 edit.frequency_penalty = bot.uchat.frequency_penalty516                 edit.presence_penalty = bot.uchat.presence_penalty517                 edit.DEBUG = bot.uchat.DEBUG518                 edit.jezik = jezik519                 edit.msg_content = bot.uchat.msg_content[jezik]520                 edit.ctxpre = bot.uchat.ctxpre521                 edit.save()522       else:523          mform.save()524       return HttpResponseRedirect(reverse('params'))525    else:526       jezik = request.session.get('jezik','srpski')527       if jezik == '': jezik='srpski'528       edit_all = Param.objects.all()529       for edit in edit_all:530          if edit.jezik == jezik:531             bot.uchat.system[jezik] = edit.system532             bot.uchat.ctxpre = edit.ctxpre533             bot.uchat.msg_content[jezik] = edit.msg_content534             bot.uchat.min_len = edit.min_len535             bot.uchat.CHUNK_SIZE = edit.CHUNK_SIZE536             bot.uchat.CHUNK_OVERLAP = edit.CHUNK_OVERLAP537             bot.uchat.max_results = edit.max_results538             bot.uchat.EMBED_MODEL = edit.EMBED_MODEL539             bot.uchat.model_id = edit.model_id540             bot.uchat.min_distance = edit.min_distance541             bot.uchat.max_distance = edit.max_distance542             bot.uchat.max_conv = edit.max_conv543             bot.uchat.temperature = edit.temperature544             bot.uchat.top_p = edit.top_p545             bot.uchat.max_tokens = edit.max_tokens546             bot.uchat.presence_penalty = edit.presence_penalty547             bot.uchat.frequency_penalty = edit.frequency_penalty548             bot.uchat.DEBUG = edit.DEBUG549       return render(550          request,551          'index_params.html',552          context = {'system': bot.uchat.system[jezik],553                   'ctrpre': bot.uchat.ctxpre,554                   'msg_content': bot.uchat.msg_content[jezik],555                   'min_len': bot.uchat.min_len,556                   'CHUNK_SIZE': bot.uchat.CHUNK_SIZE,557                   'CHUNK_OVERLAP': bot.uchat.CHUNK_OVERLAP,558                   'max_results': bot.uchat.max_results,559                   'EMBED_MODEL': bot.uchat.EMBED_MODEL,   # "all-MiniLM-L6-v2",560                   'model_id': bot.uchat.model_id,         # model_id = "Yugo60-GPT-GGUF.Q4_K_M.gguf"561                   'max_conv': bot.uchat.max_conv,562                   'min_distance': bot.uchat.min_distance,563                   'max_distance': bot.uchat.max_distance,564                   'temperature': bot.uchat.temperature,565                   'max_tokens': bot.uchat.max_tokens,566                   'top_p': bot.uchat.top_p,567                   'frequency_penalty': bot.uchat.frequency_penalty,568                   'presence_penalty': bot.uchat.presence_penalty,569                   'DEBUG': bot.uchat.DEBUG,570                   'selected_hr': selected(jezik,'hrvatski'),571                   'selected_sl': selected(jezik,'slovenački'),572                   'selected_sr': selected(jezik,'srpski'),573                   'selected_mk': selected(jezik,'makedonski'),574                }575        )576 577def importPdf(request):578    if request.method == "POST":579       form = ImportForm(request.POST)580       if form.is_valid():581          path = form.cleaned_data['path']582          jezik = form.cleaned_data['jezik']583          request.session['jezik'] = jezik584          request.session['path'] = path585          l_last = bot.uchat.last586          try:587             bot.uchat.load_docs(path, jezik)588             l_last = bot.uchat.last - l_last589             request.session['answer'] = f"Importovano {l_last} delova PDF dokumenta."590          except:591             if bot.uchat.DEBUG: print("Došlo je do problema sa importom PDF fajla.")592             request.session['answer'] = "Došlo je do problema sa importom PDF fajla."593       return HttpResponseRedirect(reverse('importpdf'))594    else:595       jezik = request.session.get('jezik','srpski')596       path = request.session.get('path','/Users/profile/...')597       answer = request.session.get('answer','')598       return render(599          request,600          'index_import.html',601          context = {'path': path,602                   'answer': answer,603                   'selected_hr': selected(jezik,'hrvatski'),604                   'selected_sl': selected(jezik,'slovenački'),605                   'selected_sr': selected(jezik,'srpski'),606                   'selected_mk': selected(jezik,'makedonski'),607                }608       )609 610from django.views import generic611 612class BotView(generic.ListView):613    """View for a bot chat."""614    if bot.uchat.DEBUG: print ("Test!")615    model = Language 616    paginate_by = 5617    last = bot.uchat.last618    619class BotViewDetail(generic.DetailView):620    model = Language621 622##@login_required623##@permission_required('catalog.can_mark_returned', raise_exception=True)624 625