File size: 5,972 Bytes
747ccea
 
fe67895
90e9b67
da419ba
f779047
54a4802
e74c3bc
90e9b67
0e5afe0
c36dc6b
6da265e
c36dc6b
6da265e
 
c36dc6b
6da265e
 
 
90e9b67
 
 
 
 
 
 
 
 
 
 
c36dc6b
 
de57dc5
6da265e
90e9b67
 
 
747ccea
 
da419ba
ff1c374
90e9b67
 
 
747ccea
90e9b67
da419ba
90e9b67
91c1d45
6da265e
 
54e6271
c36dc6b
 
54e6271
da419ba
eeb3f3c
c3d05ea
90e9b67
 
 
c36dc6b
da419ba
747ccea
 
 
 
 
 
 
91c1d45
90e9b67
 
 
 
 
 
 
 
 
 
 
 
 
 
8321675
ff1c374
d8ce384
91c1d45
ff1c374
 
fe59084
ff1c374
 
 
3176ef0
4a3346c
c36dc6b
90e9b67
 
095cabc
90e9b67
095cabc
 
90e9b67
6da265e
3176ef0
90e9b67
91c1d45
747ccea
 
 
90e9b67
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
import gradio as gr
from huggingface_hub import InferenceClient
import os
import pandas as pd
from typing import List, Tuple

# μΆ”λ‘  API ν΄λΌμ΄μ–ΈνŠΈ μ„€μ •
hf_client = InferenceClient("CohereForAI/c4ai-command-r-plus-08-2024", token=os.getenv("HF_TOKEN"))
# hf_client = InferenceClient("CohereForAI/aya-23-35B", token=os.getenv("HF_TOKEN"))

def load_code(filename):
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            return file.read()
    except FileNotFoundError:
        return f"{filename} νŒŒμΌμ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
    except Exception as e:
        return f"νŒŒμΌμ„ μ½λŠ” 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}"

def load_parquet(filename):
    try:
        df = pd.read_parquet(filename, engine='pyarrow')
        # λ°μ΄ν„°ν”„λ ˆμž„μ˜ 첫 λͺ‡ 행을 λ¬Έμžμ—΄λ‘œ λ³€ν™˜
        return df.head(10).to_string(index=False)
    except FileNotFoundError:
        return f"{filename} νŒŒμΌμ„ 찾을 수 μ—†μŠ΅λ‹ˆλ‹€."
    except Exception as e:
        return f"νŒŒμΌμ„ μ½λŠ” 쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}"

# μ½”λ“œ 파일 λ‘œλ“œ
fashion_code = load_code('fashion.cod')
uhdimage_code = load_code('uhdimage.cod')
MixGEN_code = load_code('mgen.cod')

# Parquet 파일 λ‘œλ“œ
test_parquet_content = load_parquet('test.parquet')

def respond(
    message,
    history: List[Tuple[str, str]],
    system_message="",  # κΈ°λ³Έκ°’ μΆ”κ°€
    max_tokens=1024,    # κΈ°λ³Έκ°’ μΆ”κ°€
    temperature=0.7,    # κΈ°λ³Έκ°’ μΆ”κ°€
    top_p=0.9,           # κΈ°λ³Έκ°’ μΆ”κ°€
):
    global fashion_code, uhdimage_code, MixGEN_code, test_parquet_content
    system_message = system_message or ""
    system_prefix = """λ°˜λ“œμ‹œ ν•œκΈ€λ‘œ 닡변할것. λ„ˆλŠ” 주어진 μ†ŒμŠ€μ½”λ“œλ₯Ό 기반으둜 \"μ„œλΉ„μŠ€ μ‚¬μš© μ„€λͺ… 및 μ•ˆλ‚΄, Q&Aλ₯Ό ν•˜λŠ” 역할이닀\". μ•„μ£Ό μΉœμ ˆν•˜κ³  μžμ„Έν•˜κ²Œ 4000토큰 이상 μž‘μ„±ν•˜λΌ. λ„ˆλŠ” μ½”λ“œλ₯Ό 기반으둜 μ‚¬μš© μ„€λͺ… 및 질의 응닡을 μ§„ν–‰ν•˜λ©°, μ΄μš©μžμ—κ²Œ 도움을 μ£Όμ–΄μ•Ό ν•œλ‹€. μ΄μš©μžκ°€ κΆκΈˆν•΄ ν•  만 ν•œ λ‚΄μš©μ— μΉœμ ˆν•˜κ²Œ μ•Œλ €μ£Όλ„λ‘ ν•˜λΌ. μ½”λ“œ 전체 λ‚΄μš©μ— λŒ€ν•΄μ„œλŠ” λ³΄μ•ˆμ„ μœ μ§€ν•˜κ³ , ν‚€ κ°’ 및 μ—”λ“œν¬μΈνŠΈμ™€ ꡬ체적인 λͺ¨λΈμ€ κ³΅κ°œν•˜μ§€ 마라."""

    if message.lower() == "νŒ¨μ…˜ μ½”λ“œ μ‹€ν–‰":
        system_message += f"\n\nνŒ¨μ…˜ μ½”λ“œ λ‚΄μš©:\n{fashion_code}"
        message = "νŒ¨μ…˜ κ°€μƒν”ΌνŒ…μ— λŒ€ν•œ λ‚΄μš©μ„ ν•™μŠ΅ν•˜μ˜€κ³ , μ„€λͺ…ν•  μ€€λΉ„κ°€ λ˜μ–΄μžˆλ‹€κ³  μ•Œλ¦¬κ³  μ„œλΉ„μŠ€ URL(https://aiqcamp-fash.hf.space)을 톡해 ν…ŒμŠ€νŠΈ 해보라고 좜λ ₯ν•˜λΌ."
    elif message.lower() == "uhd 이미지 μ½”λ“œ μ‹€ν–‰":
        system_message += f"\n\nUHD 이미지 μ½”λ“œ λ‚΄μš©:\n{uhdimage_code}"
        message = "UHD 이미지 생성에 λŒ€ν•œ λ‚΄μš©μ„ ν•™μŠ΅ν•˜μ˜€κ³ , μ„€λͺ…ν•  μ€€λΉ„κ°€ λ˜μ–΄μžˆλ‹€κ³  μ•Œλ¦¬κ³  μ„œλΉ„μŠ€ URL(https://openfree-ultpixgen.hf.space)을 톡해 ν…ŒμŠ€νŠΈ 해보라고 좜λ ₯ν•˜λΌ."
    elif message.lower() == "mixgen μ½”λ“œ μ‹€ν–‰":
        system_message += f"\n\nMixGEN μ½”λ“œ λ‚΄μš©:\n{MixGEN_code}"
        message = "MixGEN3 이미지 생성에 λŒ€ν•œ λ‚΄μš©μ„ ν•™μŠ΅ν•˜μ˜€κ³ , μ„€λͺ…ν•  μ€€λΉ„κ°€ λ˜μ–΄μžˆλ‹€κ³  μ•Œλ¦¬κ³  μ„œλΉ„μŠ€ URL(https://openfree-mixgen3.hf.space)을 톡해 ν…ŒμŠ€νŠΈ 해보라고 좜λ ₯ν•˜λΌ."
    elif message.lower() == "test.parquet μ‹€ν–‰":
        system_message += f"\n\ntest.parquet 파일 λ‚΄μš©:\n{test_parquet_content}"
        message = "test.parquet νŒŒμΌμ— λŒ€ν•œ λ‚΄μš©μ„ ν•™μŠ΅ν•˜μ˜€κ³ , κ΄€λ ¨ μ„€λͺ… 및 Q&Aλ₯Ό 진행할 μ€€λΉ„κ°€ λ˜μ–΄μžˆλ‹€. κΆκΈˆν•œ 점이 있으면 물어보라."

    messages = [{"role": "system", "content": f"{system_prefix} {system_message}"}]
    for val in history:
        if val[0]:
            messages.append({"role": "user", "content": val[0]})
        if val[1]:
            messages.append({"role": "assistant", "content": val[1]})
    messages.append({"role": "user", "content": message})

    response = ""
    try:
        for message in hf_client.chat_completion(
            messages,
            max_tokens=max_tokens,
            stream=True,
            temperature=temperature,
            top_p=top_p,
        ):
            token = message.choices[0].delta.get('content', None)
            if token:
                response += token.strip()
                yield response
    except Exception as e:
        yield f"μΆ”λ‘  쀑 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€: {str(e)}"

# Gradio μΈν„°νŽ˜μ΄μŠ€ μ„€μ • 뢀뢄도 μˆ˜μ •
demo = gr.ChatInterface(
    respond,
    additional_inputs=[
        gr.Textbox(label="System Message", value=""),
        gr.Slider(minimum=1, maximum=8000, value=4000, label="Max Tokens"),
        gr.Slider(minimum=0, maximum=1, value=0.7, label="Temperature"),
        gr.Slider(minimum=0, maximum=1, value=0.9, label="Top P"),
    ],
    examples=[
        ["νŒ¨μ…˜ μ½”λ“œ μ‹€ν–‰"],
        ["UHD 이미지 μ½”λ“œ μ‹€ν–‰"],
        ["MixGEN μ½”λ“œ μ‹€ν–‰"],
        ["test.parquet μ‹€ν–‰"],  # μƒˆλ‘œμš΄ 예제 μΆ”κ°€
        ["μƒμ„Έν•œ μ‚¬μš© 방법을 마치 화면을 λ³΄λ©΄μ„œ μ„€λͺ…ν•˜λ“―이 4000 토큰 이상 μžμ„Ένžˆ μ„€λͺ…ν•˜λΌ"],
        ["FAQ 20건을 μƒμ„Έν•˜κ²Œ μž‘μ„±ν•˜λΌ. 4000토큰 이상 μ‚¬μš©ν•˜λΌ."],
        ["μ‚¬μš© 방법과 차별점, νŠΉμ§•, 강점을 μ€‘μ‹¬μœΌλ‘œ 4000 토큰 이상 유튜브 μ˜μƒ 슀크립트 ν˜•νƒœλ‘œ μž‘μ„±ν•˜λΌ"],
        ["λ³Έ μ„œλΉ„μŠ€λ₯Ό SEO μ΅œμ ν™”ν•˜μ—¬ λΈ”λ‘œκ·Έ 포슀트(λ°°κ²½ 및 ν•„μš”μ„±, κΈ°μ‘΄ μœ μ‚¬ μ„œλΉ„μŠ€μ™€ λΉ„κ΅ν•˜μ—¬ 특μž₯점, ν™œμš©μ²˜, κ°€μΉ˜, κΈ°λŒ€νš¨κ³Ό, 결둠을 포함)둜 4000 토큰 이상 μž‘μ„±ν•˜λΌ"],
        ["νŠΉν—ˆ μΆœμ›μ— ν™œμš©ν•  기술 및 λΉ„μ¦ˆλ‹ˆμŠ€λͺ¨λΈ 츑면을 ν¬ν•¨ν•˜μ—¬ νŠΉν—ˆ μΆœμ›μ„œ ꡬ성에 맞게 ν˜μ‹ μ μΈ 창의 발λͺ… λ‚΄μš©μ„ μ€‘μ‹¬μœΌλ‘œ 4000 토큰 이상 μž‘μ„±ν•˜λΌ."],
        ["계속 μ΄μ–΄μ„œ λ‹΅λ³€ν•˜λΌ"],
    ],
    theme="Nymbo/Nymbo_Theme",
    cache_examples=False,  # 캐싱 λΉ„ν™œμ„±ν™” μ„€μ •
)

if __name__ == "__main__":
    demo.launch()