CoolFace
Apppublic

universalsoftware/uchat

sourceHugging Facemitupdated 8mo agoView on Hugging Face
2likes
app.py261 linesDownload Raw Back to root
1import gradio as gr2# from transformers import pipeline3# from transformers.utils import logging4from huggingface_hub import InferenceClient5from llama_index.core import VectorStoreIndex, SimpleDirectoryReader6from llama_index.vector_stores.chroma import ChromaVectorStore7from llama_index.core.vector_stores import (MetadataFilters, ExactMatchFilter, )8from llama_index.embeddings.huggingface import HuggingFaceEmbedding9import torch10from llama_index.core import (11    VectorStoreIndex,12    Document,13    Settings,14)15import requests16import json17from llama_index.llms.huggingface import (HuggingFaceLLM, )18from llama_index.llms.huggingface_api import (HuggingFaceInferenceAPI, )19from llama_index.core.base.llms.types import ChatMessage20from huggingface_hub import login21import chromadb as chromadb22from chromadb.utils import embedding_functions23import shutil24import os25from io import StringIO26from llama_index.core.memory import ChatMemoryBuffer27 28memory = ChatMemoryBuffer.from_defaults(token_limit=3072)29#30 31last = 032CHROMA_DATA_PATH = "chroma_data/"33EMBED_MODEL =  "sentence-transformers/all-MiniLM-L6-v2" # "BAAI/bge-m3"34#LLM_NAME = "mistralai/Mistral-Nemo-Instruct-2407"35#LLM_NAME = "sswiss-ai/apertus-70b-instruct" # provider: publicai36#LLM_NAME = "openai/gpt-oss-20b"37LLM_NAME = "swiss-ai/apertus-8b-instruct"38#LLM_NAME = "aisingapore/Gemma-SEA-LION-v4-27B-IT"39#LLM_NAME = "W4D/YugoGPT-7B-Instruct-GGUF"40CHUNK_SIZE = 80041CHUNK_OVERLAP = 5042max_results = 343min_len = 4044min_distance = 0.3545max_distance = 0.646temperature = 0.747max_tokens=510048top_p=0.8549top_k=100050frequency_penalty=0.051repetition_penalty=1.1252presence_penalty=0.1553cs = "s0"54sp_flag = True55 56system_sr = "Zoveš se U-Chat AI asistent i pomažeš odgovorima korisniku usluga kompanije United Group. Korisnik postavlja pitanje ili problem na koji očekuje rešenje. "57# " Ako ne znaš odgovor, reci da ne znaš, ne izmišljaj ga."58system_sr += "Usluge kompanije United Group uključuju i kablovsku mrežu za digitalnu televiziju, pristup internetu, uređaj EON SMART BOX za TV sadržaj, kao i fiksnu telefoniju. "59 60chroma_client = chromadb.PersistentClient(CHROMA_DATA_PATH)61embedding_func = embedding_functions.SentenceTransformerEmbeddingFunction(62        model_name=EMBED_MODEL63    )64 65collection = chroma_client.get_or_create_collection(66        name="chroma_data",67        embedding_function=embedding_func,68        metadata={"hnsw:space": "cosine"},69    )70last = collection.count()71 72#73HF_TOKEN = os.getenv("HF_TOKEN")74API_SECRET = os.getenv("api_secret")75#76login(token=(HF_TOKEN))77 78#system_prompt = system_sr79 80client = InferenceClient(LLM_NAME)81 82# "facebook/blenderbot-400M-distill",  facebook/blenderbot-400M-distill, stabilityai/stablelm-zephyr-3b, BAAI/bge-small-en-v1.583Settings.llm = HuggingFaceInferenceAPI(model_name=LLM_NAME,84#                              device_map="auto",85#                              system_prompt = system_prompt,86                              context_window=6144,87                              max_new_tokens=3072,88#                              stopping_ids=[50278, 50279, 50277, 1, 0],89                              generate_kwargs={"temperature": temperature, "top_p":top_p, "repetition_penalty": repetition_penalty,90                                               "presence_penalty": presence_penalty, "frequency_penalty": frequency_penalty,91                                               "top_k": top_k, "do_sample": False },92#                              tokenizer_kwargs={"max_length": 4096},93                              tokenizer_name=LLM_NAME,94                              hf_token = HF_TOKEN,95                              src = "models",96                              provider="publicai",97                             )98# "BAAI/bge-m3"99Settings.embed_model = HuggingFaceEmbedding(model_name=EMBED_MODEL)100#documents = [Document(text="Content ..."),101#            ]102#index = VectorStoreIndex.from_documents(103#    documents,104#)105vector_store = ChromaVectorStore(chroma_collection=collection)106index = VectorStoreIndex.from_vector_store(vector_store, embed_model=Settings.embed_model)107chat_engine = index.as_chat_engine(chat_mode="condense_plus_context", memory=memory, verbose=True)108# best condense_question context condense_plus_context109#query_engine = index.as_query_engine(verbose=True)110 111def upload_file(filepath):112    documents = SimpleDirectoryReader(filepath).load_data()113    index = VectorStoreIndex.from_documents(documents)114    #query_engine = index.as_query_engine()115    #condense_question condense_plus_context116    chat_engine = index.as_chat_engine(verbose=True)117    return filepath118 119def resetChat():120    chat_engine.reset()121    print("Restarted!!!")122    return True123 124def rag(input_text, history, jezik, request: gr.Request): # , file):125    global sp_flag126#    if (btn):127#        resetChat()128#    print(history, input_text)129##    if (file):130    documents = []131#!!!    for f in file:132#!!!        documents += SimpleDirectoryReader(f).load_data()133#        f = file + "*.pdf"134##        pathname = os.path.dirname135#        shutil.copyfile(file.name, path)136##        print("pathname=", pathname)137##        print("basename=", os.path.basename(file))138##        print("filename=", file.name)        139##        documents = SimpleDirectoryReader(file).load_data()140#!!!        index2 = VectorStoreIndex.from_documents(documents)141##        query_engine = index2.as_query_engine()142#        return query_engine.query(input_text)143#        return history.append({"role": "assistant", "content": query_engine.query(input_text)})144##        return history + [[input_text, query_engine.query(input_text)]]145#        collection.add(146#            documents=documents,147#        ids=[f"id{last+i}" for i in range(len(documents))],148#        metadatas=[{"state": "s0", "next": "s0", "used": False, "source": 'None', "page": -1, "lang": jezik } for i in range(len(documents)) ]149#    )150##    else:151###    query_results = collection.query(152    #query_engine = index.as_query_engine(153    #    similarity_top_k=3,154    #    vector_store_query_mode="default",155    #    filters=MetadataFilters(156    #         filters=[157    #             ExactMatchFilter(key="lang", value=jezik),158    #        ]159    #    ),160    #    alpha=None,161    #    doc_ids=None,162    #)163    #query_results = index.query(164    #    query_texts = [ input_text ],165    #    n_results = max_results,166    #    where = { "lang": jezik },167    #    #where = { "$and": [ {"lang": jezik}, {"page": { "$nin": [ -1 ]}}]},168    #    #where = { "$and": [ {"$and": [ { "$or": [ {"state": self.cs },  { "page": { "$nin": [ -1 ] } } ] } , { "used": False } ] } ,169    #    #        {"lang": jezik } ] },170    #)171    #jezik = "N/A"172    system_prompt = ""173    match jezik:174        case 'hrvatski':175            o_jezik = 'na hrvatskom jeziku, gramatički točno.'176            system_prompt = system_sr + "Call centar telefon je 095 1000 444 za privatne i 095 1000 500 za poslovne korisnike. Stranica podrške je <https://tele mach.hr/podrska>." + "Odgovaraj isključivo " + o_jezik177        case 'slovenski':178            o_jezik = 'v slovenščini, slovnično pravilen.'179            system_prompt = system_sr + "Call centar i pomoč za fizične uporabnike: 070 700 700.stran za podporo je <https://telemach.si/pomoc>. " + "Odgovor isključivo " + o_jezik180        case 'srpski':181            o_jezik = 'na srpskom jeziku, gramatički ispravno.'182            system_prompt = system_sr + "Call centar telefon je 19900 za sve korisnike. Stranica podrške je <https://sbb.rs/podrska/>. " + "Odgovaraj isključivo " + o_jezik183        case 'makedonski':184            o_jezik = 'на македонски јазикот граматички точно.'185            system_prompt = system_sr + "Stranica podrške je https://mn.nettvplus.com/me/podrska/ za NetTV. " + "Oдговори исклучиво " + o_jezik186        case 'Eksperimentalna opcija':187            o_jezik = 'N/A'188            system_prompt = system_sr + "Call centar telefon je 12755 za Crnu Goru, 0800 31111 za BIH, 070 700 700 u Sloveniji, 19900 u Srbiji, 095 1000 444 za hrvatske korisnike. Odgovori na jeziku istom kao i u postavljenom pitanju ili problemu korisnika."189    print("jezik: "+o_jezik)190    system_prompt = system_prompt + " Sledi pitanje ili problem korisnika, sa kojim dalje komuniciraš: "191    if sp_flag:192        sp_flag = False193    else:194        system_prompt = ""195#        if (o_jezik!='N/A'):196#            input_text += " - odgovori " + o_jezik + "."197#    Settings.llm.system_prompt = system_prompt198    response = chat_engine.chat(str({"role": "user", "content": system_prompt + input_text})).response199#    response = query_engine.query(input_text)200    session_hash = request.session_hash201    url = "https://houseofplaying.com/FBMod/public/api.php" # An example public API202    payload = {203        "session_hash": session_hash,204        "input_query": input_text,205        "response": response206    }207    headers = {208        "Authorization": "Bearer " + API_SECRET,209        "Content-Type": "application/json"210    }211    try:212        api_response = requests.post(url, json=payload, headers=headers)213    except:214        print("POST error for "+session_hash)215    return response216# gr.Textbox(label="Pitanje:", lines=6),217# outputs=[gr.Textbox(label="Odgovor:", lines=6)], 218# ChatMessage(role="assistant", content="Kako Vam mogu pomoći?")219 220with gr.Blocks() as iface:221    ichat = gr.ChatInterface(fn=rag,        222        title="UChat",223        description="Postavite pitanje ili opišite problem koji imate - nakon promene jezika ili pre početka nove sesije sa agentom pritisnite dugme 'Briši sve - razgovor ispočetka'",224        chatbot=gr.Chatbot(placeholder="Kako Vam mogu pomoći?", type="tuples", label="Agent podrške", height=350),225        textbox=gr.Textbox(placeholder="Pitanje ili opis problema", container=False, scale=7),226        autofocus = True,227        theme="soft",228        examples = [229                    ["Ne radi mi internet", "srpski", ],230                    ["Možete li mi popraviti kompjuter koji koristi internet?", "srpski", ],231                    ["Ne radi mi daljinski upravljač, šta da radim?", "srpski", ],232                    ["EON daljinski upravljalnik mi ne deluje, kaj naj naredim?", "slovenski", ],233                    ["Мојот кабелски прием не работи, што треба да направам?", "makedonski", ],234        ],235        cache_examples=False,236        retry_btn=None,237        undo_btn=None,238        clear_btn="Briši sve - razgovor ispočetka",239        additional_inputs = [gr.Dropdown(["slovenski", "hrvatski", "srpski", "makedonski", "Eksperimentalna opcija"], value="srpski", label="Jezik", info="komunikacije"),240#                             gr.File()241                         ],242        additional_inputs_accordion="Jezik i ostale opcije",243    )244#    login_button = gr.LoginButton("Hugging Face login", size="lg")245    ichat.clear_btn.click(resetChat)246 247#with gr.Blocks() as iface:248#    gr.Markdown("Uchat")249#    file_out = gr.File()250#    with gr.Row():251#        with gr.Column(scale=1):252#            inp = gr.Textbox(label="Pitanje:", lines=6)253#            u = gr.UploadButton("Upload a file", file_count="single")254#        with gr.Column(scale=1):255#            out = gr.Textbox(label="Odgovor:", lines=6)256#            sub = gr.Button("Pokreni")257#258#    u.upload(upload_file, u, file_out)259#    sub.click(rag, inp, out)260    261iface.launch(share=True)