왓슨 기초
This commit is contained in:
@@ -0,0 +1,12 @@
|
|||||||
|
키,몸무게,BMI 판정,timestamp
|
||||||
|
173,85,"당신의 BMI 지수는 키 : 173, 몸무게 : 85, 판정 : 비만",2026-05-15 16:47:09.270006
|
||||||
|
173,85,"당신의 BMI 지수는 키 : 173, 몸무게 : 85, 판정 : 비만",2026-05-15 16:47:10.782534
|
||||||
|
173,85,"당신의 BMI 지수는 키 : 173, 몸무게 : 85, 판정 : 비만",2026-05-15 16:47:12.258788
|
||||||
|
200,85,"당신의 BMI 지수는 키 : 200, 몸무게 : 85, 판정 : 정상체중",2026-05-15 16:47:27.687789
|
||||||
|
200,85,"당신의 BMI 지수는 키 : 200, 몸무게 : 85, 판정 : 정상체중",2026-05-15 16:50:13.135872
|
||||||
|
200,1090,"당신의 BMI 지수는 키 : 200, 몸무게 : 85, 판정 : 정상체중",2026-05-15 16:50:16.877887
|
||||||
|
200,1090,"당신의 BMI 지수는 키 : 200, 몸무게 : 85, 판정 : 정상체중",2026-05-15 16:50:18.833742
|
||||||
|
,,,2026-05-15 16:50:23.320214
|
||||||
|
,,,2026-05-15 16:50:24.862371
|
||||||
|
,,,2026-05-15 16:50:26.797623
|
||||||
|
124,21,,2026-05-15 16:50:29.805917
|
||||||
|
@@ -0,0 +1,8 @@
|
|||||||
|
image,output,timestamp
|
||||||
|
.gradio/flagged/image/6d40714a1a97620c4003/스크린샷 2026-05-15 오후 2.46.33.png,,2026-05-15 16:54:31.487199
|
||||||
|
.gradio/flagged/image/32bf3df6a53702a1bc81/스크린샷 2026-05-15 오후 2.46.33.png,"'
|
||||||
|
이미지 분석 결과
|
||||||
|
- 가로 : 1032px
|
||||||
|
- 세로 : 471px
|
||||||
|
- 이미지 모드 : RGB
|
||||||
|
",2026-05-15 16:58:37.038848
|
||||||
|
@@ -0,0 +1,2 @@
|
|||||||
|
제품명,브랜드명,제품 특징,톤앤매너,필수 포함 키워드,브랜드 핵심 가치,output,timestamp
|
||||||
|
ㅁㅁ,,,,,,,2026-05-18 11:13:46.852604
|
||||||
|
@@ -0,0 +1,35 @@
|
|||||||
|
여행 지역,예산(만원),여행 스타일,traval range,output,timestamp
|
||||||
|
지옥,300,휴양,1week~,"제가 여행 스캐줄러 AI로서 여행 계획을 짜겠습니다.
|
||||||
|
|
||||||
|
목적지: 지옥
|
||||||
|
|
||||||
|
여행 스타일: 휴양
|
||||||
|
|
||||||
|
기간: 1주일
|
||||||
|
|
||||||
|
비용: 300
|
||||||
|
|
||||||
|
휴양을 위한 지옥 여행 계획:
|
||||||
|
|
||||||
|
1일차:
|
||||||
|
* 출발 후 지옥 도착 (교통수단: 불편한 화산 배)
|
||||||
|
* 체크인 후 경치 좋은 호텔/리조트에서 휴식
|
||||||
|
* 지옥같은 해변에서 아름다운 석양 감상 및 따뜻한 해수욕
|
||||||
|
|
||||||
|
2일차:
|
||||||
|
* 지옥의 불타오르는 숲을 탐험하기 위한 일일 투어 시작
|
||||||
|
* 야생 동물 관찰 및 식물 멀티미디어 가이드 투어
|
||||||
|
* 소박한 지옥 요리를 즐길 수 있는 현지 레스토랑에서 저녁 식사
|
||||||
|
|
||||||
|
3일차:
|
||||||
|
* 내부 지호강을 탐험하기 위해 지옥의 유일한 지하철 라인을 이용하여 강변으로 이동
|
||||||
|
* 지옥의 역사와 문화에 대해 배울 수 있는 지역 박물관 방문
|
||||||
|
* 지옥의 남쪽 지역 발견을 위한 야외 야경 투어
|
||||||
|
|
||||||
|
4일차:
|
||||||
|
* 숲 속에 위치한 지옥의 풍경이 아름다운 수상 골프 코스에서 골프 플레이
|
||||||
|
* 식사와 즐거운 시간을 보낼 수 있는 지옥 스타일의 스파 & 웰빙 센터에서 휴식
|
||||||
|
* 현지 음악을 듣고 현지인들과 함께 즐기는 지옥의 전통 댄스 파티
|
||||||
|
|
||||||
|
5일차:
|
||||||
|
* 불타는 빙하 동굴 탐험을 위해 조용한 스노",2026-05-18 17:01:25.733778
|
||||||
|
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 126 KiB |
@@ -0,0 +1,76 @@
|
|||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ibm_watsonx_ai import APIClient
|
||||||
|
from ibm_watsonx_ai import Credentials
|
||||||
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
# .env 내용 가져오기
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
apikey = os.getenv("WATSONX_API_KEY")
|
||||||
|
project_id = os.getenv("WATSONX_PROJECT_ID")
|
||||||
|
watsonx_ai_url = os.getenv("WATSONX_URL")
|
||||||
|
|
||||||
|
credentials = Credentials(
|
||||||
|
url = f"{watsonx_ai_url}",
|
||||||
|
api_key = f"{apikey}",
|
||||||
|
)
|
||||||
|
client = APIClient(credentials)
|
||||||
|
|
||||||
|
model = ModelInference(
|
||||||
|
model_id="ibm/granite-4-h-small",
|
||||||
|
api_client=client,
|
||||||
|
project_id=f"{project_id}",
|
||||||
|
params = {
|
||||||
|
"max_tokens": 1000
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def ad_text(name, brand_name, strength, tone, keyword, value):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
system_prompt = """
|
||||||
|
1. SWOT 분석하여 광고 문구 작성해줘
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
user_prompt=f"""
|
||||||
|
아래 내용을 참고해서 1~2줄짜리 광고 문구 5개 작성해줘.
|
||||||
|
- 제품명 : {name}
|
||||||
|
- 브랜드명 : {brand_name}
|
||||||
|
- 제품특징 : {strenghth}
|
||||||
|
- 톤앤매너 : {tone}
|
||||||
|
- 브랜드 핵심 가치 : {value}
|
||||||
|
- 필수 포함 키워드 : {keyword}
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
# 시스템 프롬프트
|
||||||
|
{"role" : "system", "content" : system_prompt},
|
||||||
|
{"role" : "user", "content" : user_prompt},
|
||||||
|
]
|
||||||
|
|
||||||
|
generated_response = model.chat(messages=messages)
|
||||||
|
return print(generated_response['choices'][0]['message']['content'])
|
||||||
|
|
||||||
|
demo = gr.Interface(
|
||||||
|
fn=ad_text,
|
||||||
|
inputs=[gr.Text(label = "제품명"),
|
||||||
|
gr.Text(label = "브랜드명"),
|
||||||
|
gr.Text(label = "제품 특징"),
|
||||||
|
gr.Text(label = "톤앤매너"),
|
||||||
|
gr.Text(label = "필수 포함 키워드"),
|
||||||
|
gr.Text(label = "브랜드 핵심 가치"),
|
||||||
|
],
|
||||||
|
|
||||||
|
outputs=[gr.Markdown()],
|
||||||
|
title="광고 문구 프로그램",
|
||||||
|
description="텍스트 입력 시 ai가 광고 문구를 작생해 드립니다."
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
def greet(name, intensity):
|
||||||
|
return "Hello, " + name + "!" * int(intensity)
|
||||||
|
|
||||||
|
demo = gr.Interface(
|
||||||
|
fn=greet,
|
||||||
|
inputs=["text", "slider"],
|
||||||
|
outputs=["text"],
|
||||||
|
api_name="predict"
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
def greet(name, grade):
|
||||||
|
return name + "⭐" * int(grade)
|
||||||
|
|
||||||
|
demo = gr.Interface(
|
||||||
|
fn=greet,
|
||||||
|
inputs=[gr.Text(label = "음식명"), gr.Slider(1, 5, step=1, label = "만족도")],
|
||||||
|
outputs=[gr.Text(label= "만족도 출력")],
|
||||||
|
api_name="별점 리뷰 생성"
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
def bmi_calculator(height, weight):
|
||||||
|
bmi = weight / (float(height / 100) ** 2)
|
||||||
|
|
||||||
|
if bmi < 18.5 :
|
||||||
|
result = "저체중"
|
||||||
|
elif bmi < 22.9 :
|
||||||
|
result = "정상체중"
|
||||||
|
elif bmi < 24.9 :
|
||||||
|
result = "과체중"
|
||||||
|
else :
|
||||||
|
result = "비만"
|
||||||
|
|
||||||
|
# 당신의 BMI 지수는 키 : 158, 몸무게 : 60, 판정 : 저체중
|
||||||
|
return f"당신의 BMI 지수는 키 : {height}, 몸무게 : {weight}, 판정 : {result}"
|
||||||
|
|
||||||
|
demo = gr.Interface(
|
||||||
|
fn=bmi_calculator,
|
||||||
|
inputs=[gr.Number(label = "키"), gr.Number(label = "몸무게")],
|
||||||
|
outputs=[gr.Text(label= "BMI 판정")],
|
||||||
|
api_name="BMI 측정기"
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
def predict(image):
|
||||||
|
# 이미지 width, height 정보 리턴
|
||||||
|
width, height = image.size
|
||||||
|
|
||||||
|
return f"""
|
||||||
|
이미지 분석 결과
|
||||||
|
- 가로 : {width}px
|
||||||
|
- 세로 : {height}px
|
||||||
|
- 이미지 모드 : {image.mode}
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
interface = gr.Interface(predict, gr.Image(type="pil"), gr.Textbox())
|
||||||
|
interface.launch()
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
def process_image(editor_value):
|
||||||
|
'''
|
||||||
|
composite : 원본 그림 위에 레이어 반영한 최종 이미지
|
||||||
|
'''
|
||||||
|
|
||||||
|
image = editor_value['composite']
|
||||||
|
enhancer = ImageEnhance.Brightness(image)
|
||||||
|
result = enhancer.enhance(1.5)
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
|
interface = gr.Interface(process_image, gr.ImageEditor(type="pil"), gr.Image())
|
||||||
|
interface.launch()
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
def greet(name):
|
||||||
|
return "Hello " + name + "!"
|
||||||
|
|
||||||
|
|
||||||
|
with gr.Blocks() as demo:
|
||||||
|
with gr.Row():
|
||||||
|
name = gr.Textbox(label="Name")
|
||||||
|
output = gr.Textbox(label="Output Box")
|
||||||
|
greet_btn = gr.Button("Greet")
|
||||||
|
greet_btn.click(fn=greet, inputs=name, outputs=output, api_name="greet")
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
import gradio as gr # 1. 'gr' 정의 (NameError 해결)
|
||||||
|
|
||||||
|
# 응원 함수
|
||||||
|
def cheer(name, level):
|
||||||
|
return f"{name} 화이팅! " + "🥳" * int(level)
|
||||||
|
|
||||||
|
# 별점 함수
|
||||||
|
def review(name, grade):
|
||||||
|
return f"{name} " + "⭐" * int(grade)
|
||||||
|
|
||||||
|
# BMI 함수
|
||||||
|
def bmi_calculator(height, weight):
|
||||||
|
if not height or not weight: # 입력값이 없을 때 방어
|
||||||
|
return "키와 몸무게를 모두 입력해주세요."
|
||||||
|
|
||||||
|
bmi = weight / ((height / 100) ** 2)
|
||||||
|
|
||||||
|
if bmi < 18.5: result = "저체중"
|
||||||
|
elif bmi < 22.9: result = "정상체중"
|
||||||
|
elif bmi < 24.9: result = "과체중"
|
||||||
|
else: result = "비만"
|
||||||
|
|
||||||
|
return f"결과: {result} (BMI: {bmi:.2f})"
|
||||||
|
|
||||||
|
# 인터페이스 구성
|
||||||
|
with gr.Blocks() as demo:
|
||||||
|
gr.Markdown("# 통합 도구 모음")
|
||||||
|
|
||||||
|
with gr.Tab("응원"):
|
||||||
|
c_name = gr.Textbox(label="이름")
|
||||||
|
c_level = gr.Slider(1, 5, step=1, label="응원강도")
|
||||||
|
c_out = gr.Textbox(label="결과")
|
||||||
|
gr.Button("보내기").click(fn=cheer, inputs=[c_name, c_level], outputs=c_out)
|
||||||
|
|
||||||
|
with gr.Tab("별점"):
|
||||||
|
r_name = gr.Textbox(label="음식명")
|
||||||
|
r_grade = gr.Slider(1, 5, step=1, label="만족도")
|
||||||
|
r_out = gr.Textbox(label="리뷰 결과")
|
||||||
|
# 2. 여기서 inputs에 r_name과 r_grade 두 개를 정확히 넣어줘야 합니다!
|
||||||
|
gr.Button("등록").click(fn=review, inputs=[r_name, r_grade], outputs=r_out)
|
||||||
|
|
||||||
|
with gr.Tab("BMI"):
|
||||||
|
h = gr.Number(label="키(cm)")
|
||||||
|
w = gr.Number(label="몸무게(kg)")
|
||||||
|
b_out = gr.Textbox(label="판정 결과")
|
||||||
|
gr.Button("계산").click(fn=bmi_calculator, inputs=[h, w], outputs=b_out)
|
||||||
|
|
||||||
|
# 3. 마지막에 괄호()를 붙여서 실행
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
|
||||||
|
def echo(message, history):
|
||||||
|
return message
|
||||||
|
|
||||||
|
|
||||||
|
demo = gr.ChatInterface(
|
||||||
|
fn=echo, examples=["hello", "hola", "merhaba"], title="Echo Bot"
|
||||||
|
)
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ibm_watsonx_ai import APIClient
|
||||||
|
from ibm_watsonx_ai import Credentials
|
||||||
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
# .env 내용 가져오기
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
apikey = os.getenv("WATSONX_API_KEY")
|
||||||
|
project_id = os.getenv("WATSONX_PROJECT_ID")
|
||||||
|
watsonx_ai_url = os.getenv("WATSONX_URL")
|
||||||
|
|
||||||
|
credentials = Credentials(
|
||||||
|
url = f"{watsonx_ai_url}",
|
||||||
|
api_key = f"{apikey}",
|
||||||
|
)
|
||||||
|
client = APIClient(credentials)
|
||||||
|
|
||||||
|
model = ModelInference(
|
||||||
|
model_id="ibm/granite-8b-code-instruct",
|
||||||
|
api_client=client,
|
||||||
|
project_id=f"{project_id}",
|
||||||
|
params = {
|
||||||
|
"max_tokens": 1000
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def code_text(text):
|
||||||
|
|
||||||
|
|
||||||
|
system_prompt = """
|
||||||
|
너는 코드 전문가임
|
||||||
|
|
||||||
|
사용자의 욕구사항을 분석하여 :
|
||||||
|
- 정확한 코드
|
||||||
|
- 실행 가능한 코드
|
||||||
|
- 가독성이 좋은 코드
|
||||||
|
- 초보자도 이해할 수 있는 설명
|
||||||
|
을 제공하세요.
|
||||||
|
|
||||||
|
[규칙]
|
||||||
|
1. 반드시 코드 블록('''')형식으로 작성
|
||||||
|
2. 코드에는 적절한 주석 포함
|
||||||
|
3. 필요한 라이브러리가 있다면 함께 설명
|
||||||
|
4. 코드 동작 원리를 간단히 설명
|
||||||
|
5. 오류 가능성이 있는 부분은 주의사항 추가
|
||||||
|
6. 사용자의 요청 언어(python, javascript 등)에 맞춰 작성
|
||||||
|
7. 불필요하게 긴 설명은 피하고 핵심 위주로 작성
|
||||||
|
|
||||||
|
[응답 형식]
|
||||||
|
1. 기능설명
|
||||||
|
2. 코드
|
||||||
|
3. 코드설명
|
||||||
|
4. 실행 결과 또는 사용 예시
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
# 시스템 프롬프트
|
||||||
|
{"role" : "system", "content" : system_prompt},
|
||||||
|
{"role" : "user", "content" : text},
|
||||||
|
]
|
||||||
|
|
||||||
|
generated_response = model.chat(messages=messages)
|
||||||
|
return generated_response['choices'][0]['message']['content']
|
||||||
|
|
||||||
|
demo = gr.Interface(
|
||||||
|
fn=code_text,
|
||||||
|
inputs=[
|
||||||
|
gr.Textbox(lines=10, label = "코드입력", placeholder="여기에 코드를 입력해주세요."),
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
outputs=[gr.Markdown()],
|
||||||
|
title="코드 작성 프로그램",
|
||||||
|
description="코드를 AI가 작성해드립니다."
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
from ibm_watsonx_ai import APIClient
|
||||||
|
from ibm_watsonx_ai import Credentials
|
||||||
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
||||||
|
|
||||||
|
credentials = Credentials(
|
||||||
|
url = "{watsonx_ai_url}",
|
||||||
|
api_key = "{apikey}",
|
||||||
|
)
|
||||||
|
client = APIClient(credentials)
|
||||||
|
|
||||||
|
model = ModelInference(
|
||||||
|
model_id="ibm/granite-13b-instruct-v2",
|
||||||
|
api_client=client,
|
||||||
|
project_id="{project_id}",
|
||||||
|
params = {
|
||||||
|
"max_new_tokens": 100
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
prompt = 'How far is Paris from Bangalore?'
|
||||||
|
|
||||||
|
print(model.generate(prompt))
|
||||||
|
print(model.generate_text(prompt))
|
||||||
@@ -0,0 +1,112 @@
|
|||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ibm_watsonx_ai import APIClient
|
||||||
|
from ibm_watsonx_ai import Credentials
|
||||||
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
||||||
|
import gradio as gr
|
||||||
|
import base64
|
||||||
|
import io
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# .env 내용 가져오기
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
apikey = os.getenv("WATSONX_API_KEY")
|
||||||
|
project_id = os.getenv("WATSONX_PROJECT_ID")
|
||||||
|
watsonx_ai_url = os.getenv("WATSONX_URL")
|
||||||
|
|
||||||
|
credentials = Credentials(
|
||||||
|
url = f"{watsonx_ai_url}",
|
||||||
|
api_key = f"{apikey}",
|
||||||
|
)
|
||||||
|
client = APIClient(credentials)
|
||||||
|
|
||||||
|
model = ModelInference(
|
||||||
|
model_id="meta-llama/llama-3-2-11b-vision-instruct",
|
||||||
|
api_client=client,
|
||||||
|
project_id=f"{project_id}",
|
||||||
|
params = {
|
||||||
|
"max_tokens": 3000
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
def image_to_base64(image):
|
||||||
|
"""
|
||||||
|
pillow 형식의 이미지를 가져와 원하는 포맷으로 저장
|
||||||
|
base64 인코딩 형식으로 이미지 리턴
|
||||||
|
"""
|
||||||
|
|
||||||
|
buffer = io.BytesIO()
|
||||||
|
image.save(buffer, format="PNG")
|
||||||
|
|
||||||
|
|
||||||
|
image_base64 = base64.b64encode(buffer.getvalue()).decode('utf-8')
|
||||||
|
return image_base64
|
||||||
|
|
||||||
|
def image_text(image, user_prompt):
|
||||||
|
|
||||||
|
if image is None:
|
||||||
|
return "이미지를 입력해 주세요"
|
||||||
|
|
||||||
|
# base64
|
||||||
|
base64_image = image_to_base64(image)
|
||||||
|
|
||||||
|
|
||||||
|
system_prompt = """
|
||||||
|
당신은 이미지 분석 전문가입니다.
|
||||||
|
사용자의 요청에 따라 이미지를 분석하세요.
|
||||||
|
- 이미지 설명
|
||||||
|
- 분위기 분석
|
||||||
|
- 감정 분석
|
||||||
|
- 객체 설명
|
||||||
|
- 캡션 생성
|
||||||
|
- 여행 추천
|
||||||
|
- 스타일 분석
|
||||||
|
|
||||||
|
등을 수행하세요
|
||||||
|
|
||||||
|
항상:
|
||||||
|
- 한국어로 답변
|
||||||
|
- 사용자의 요청 의도를 우선 반영
|
||||||
|
- 읽기 쉽게 작성
|
||||||
|
"""
|
||||||
|
|
||||||
|
if user_prompt is None:
|
||||||
|
user_prompt = f"""
|
||||||
|
이미지를 분석해줘.
|
||||||
|
"""
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
# 시스템 프롬프트
|
||||||
|
{"role" : "system", "content" : system_prompt},
|
||||||
|
{"role" : "user", "content" : [
|
||||||
|
{
|
||||||
|
"type": "image_url",
|
||||||
|
"image_url": {
|
||||||
|
"url": f"data:image/png;base64,{base64_image}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "text",
|
||||||
|
"text": user_prompt
|
||||||
|
},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
generated_response = model.chat(messages=messages)
|
||||||
|
return generated_response['choices'][0]['message']['content']
|
||||||
|
|
||||||
|
demo = gr.Interface(
|
||||||
|
fn=image_text,
|
||||||
|
inputs=[gr.Image(type="pil"),
|
||||||
|
gr.Text(label="유저 명령"),
|
||||||
|
],
|
||||||
|
|
||||||
|
outputs=[gr.Markdown()],
|
||||||
|
title="이미지 분석 프로그램",
|
||||||
|
description="이미지 업로드 시 AI가 이미지 분석"
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 542 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 342 KiB |
@@ -0,0 +1,71 @@
|
|||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ibm_watsonx_ai import APIClient
|
||||||
|
from ibm_watsonx_ai import Credentials
|
||||||
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# .env 내용 가져오기
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
apikey = os.getenv("WATSONX_API_KEY")
|
||||||
|
project_id = os.getenv("WATSONX_PROJECT_ID")
|
||||||
|
watsonx_ai_url = os.getenv("WATSONX_URL")
|
||||||
|
|
||||||
|
credentials = Credentials(
|
||||||
|
url = f"{watsonx_ai_url}",
|
||||||
|
api_key = f"{apikey}",
|
||||||
|
)
|
||||||
|
client = APIClient(credentials)
|
||||||
|
|
||||||
|
model = ModelInference(
|
||||||
|
model_id="ibm/granite-4-h-small",
|
||||||
|
api_client=client,
|
||||||
|
project_id=f"{project_id}",
|
||||||
|
params = {
|
||||||
|
"max_tokens": 1000
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def interview_text(genre):
|
||||||
|
|
||||||
|
|
||||||
|
system_prompt = """
|
||||||
|
인터뷰를 한다고 생각하고 대상의 주제를 가지고 일단 핵심 내용을 정리하고 인터뷰 질문을 생성해줘.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
user_prompt=f"""
|
||||||
|
아래 내용 참고해서
|
||||||
|
1. 장르 특징 5줄 정리
|
||||||
|
2. 인터뷰 질문 8개 작성해줘
|
||||||
|
- genre : {genre}
|
||||||
|
"""
|
||||||
|
|
||||||
|
print(genre)
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
# 시스템 프롬프트
|
||||||
|
{"role" : "system", "content" : system_prompt},
|
||||||
|
{"role" : "user", "content" : user_prompt},
|
||||||
|
]
|
||||||
|
|
||||||
|
generated_response = model.chat(messages=messages)
|
||||||
|
return generated_response['choices'][0]['message']['content']
|
||||||
|
|
||||||
|
demo = gr.Interface(
|
||||||
|
fn=interview_text,
|
||||||
|
inputs=[gr.Text(label = "genre"),
|
||||||
|
|
||||||
|
],
|
||||||
|
|
||||||
|
outputs=[gr.Markdown()],
|
||||||
|
title="인터뷰 질문 생성 프로그램",
|
||||||
|
description="질문 생성"
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ibm_watsonx_ai import APIClient
|
||||||
|
from ibm_watsonx_ai import Credentials
|
||||||
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
# .env 내용 가져오기
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
apikey = os.getenv("WATSONX_API_KEY")
|
||||||
|
project_id = os.getenv("WATSONX_PROJECT_ID")
|
||||||
|
watsonx_ai_url = os.getenv("WATSONX_URL")
|
||||||
|
|
||||||
|
credentials = Credentials(
|
||||||
|
url = f"{watsonx_ai_url}",
|
||||||
|
api_key = f"{apikey}",
|
||||||
|
)
|
||||||
|
client = APIClient(credentials)
|
||||||
|
|
||||||
|
model = ModelInference(
|
||||||
|
model_id="ibm/granite-4-h-small",
|
||||||
|
api_client=client,
|
||||||
|
project_id=f"{project_id}",
|
||||||
|
params = {
|
||||||
|
"max_tokens": 1000
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def summarize_text(text):
|
||||||
|
|
||||||
|
if not text.strip():
|
||||||
|
return "텍스트를 입력해주세요."
|
||||||
|
|
||||||
|
instructions = """
|
||||||
|
당신은 텍스트를 한국어로 요악하는 전문가이빈다.
|
||||||
|
- 당신의 임무는 아래 주어진 텍스트 문장을 한국어로 요약하는 것입니다.
|
||||||
|
- 요약 시 다음 사항을 반드시 반영해야 합니다.
|
||||||
|
- 중복된 내용은 생략하되, 반복되는 내용은 요약해서 더 강조합니다.
|
||||||
|
- 사례 중심보다는 개념과 주장 중심으로 요약합니다.
|
||||||
|
- 3줄 이내로 요약합니다.
|
||||||
|
- 블릿 기호 형식으로 작성합니다.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
# 시스템 프롬프트
|
||||||
|
{"role" : "system", "content" : instructions},
|
||||||
|
{"role" : "user", "content" : text},
|
||||||
|
]
|
||||||
|
|
||||||
|
generated_response = model.chat(messages=messages)
|
||||||
|
return print(generated_response['choices'][0]['message']['content'])
|
||||||
|
|
||||||
|
demo = gr.Interface(
|
||||||
|
fn=summarize_text,
|
||||||
|
inputs=[gr.TextArea(lines=10, placeholder="요약할 내용의 텍스트 입력..", label="입력")],
|
||||||
|
outputs=[gr.Markdown()],
|
||||||
|
title="watsonx 기반의 요약 프로그램",
|
||||||
|
description="텍스트 입력 시 ai 요약"
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,83 @@
|
|||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ibm_watsonx_ai import APIClient
|
||||||
|
from ibm_watsonx_ai import Credentials
|
||||||
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# .env 내용 가져오기
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
apikey = os.getenv("WATSONX_API_KEY")
|
||||||
|
project_id = os.getenv("WATSONX_PROJECT_ID")
|
||||||
|
watsonx_ai_url = os.getenv("WATSONX_URL")
|
||||||
|
|
||||||
|
credentials = Credentials(
|
||||||
|
url = f"{watsonx_ai_url}",
|
||||||
|
api_key = f"{apikey}",
|
||||||
|
)
|
||||||
|
client = APIClient(credentials)
|
||||||
|
|
||||||
|
model = ModelInference(
|
||||||
|
model_id="ibm/granite-4-h-small",
|
||||||
|
api_client=client,
|
||||||
|
project_id=f"{project_id}",
|
||||||
|
params = {
|
||||||
|
"max_tokens": 1000
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def recommend(local, money, style, day):
|
||||||
|
|
||||||
|
system_prompt = """
|
||||||
|
너는 여행 스캐줄러 AI
|
||||||
|
한글로 답변해주고
|
||||||
|
여행사의 여행 스케쥴 처럼 짜줘
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
user_prompt=f"""
|
||||||
|
다음 내용을 참고해서 계획 짜줘
|
||||||
|
- 지역 : {local}
|
||||||
|
- 비용 :{money}
|
||||||
|
- 여행 스타일 : {style}
|
||||||
|
- 기간 :{day}
|
||||||
|
"""
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
# 시스템 프롬프트
|
||||||
|
{"role" : "system", "content" : system_prompt},
|
||||||
|
{"role" : "user", "content" : user_prompt},
|
||||||
|
]
|
||||||
|
|
||||||
|
# generated_response = model.chat(messages=messages)
|
||||||
|
# return generated_response['choices'][0]['message']['content']
|
||||||
|
|
||||||
|
# chat_stream()
|
||||||
|
generated_response = model.chat_stream(messages=messages)
|
||||||
|
|
||||||
|
full_response = ""
|
||||||
|
for chunk in generated_response:
|
||||||
|
if chunk['choices'] :
|
||||||
|
full_response += chunk["choices"][0]["delta"].get("content", "")
|
||||||
|
yield full_response
|
||||||
|
|
||||||
|
demo = gr.Interface(
|
||||||
|
fn=recommend,
|
||||||
|
inputs=[
|
||||||
|
gr.Text(label = "여행 지역"),
|
||||||
|
gr.Slider(10, 300, label="예산(만원)"),
|
||||||
|
gr.Dropdown(["모험", "휴양", "문화", "음식", "액티비티"], label="여행 스타일"),
|
||||||
|
gr.Radio(["1day", "2~3day", "4~7day", "1week~"], label="traval range"),
|
||||||
|
],
|
||||||
|
|
||||||
|
outputs=[gr.Textbox(lines=5)],
|
||||||
|
title="AI 여행 플래너",
|
||||||
|
description="여행지역, 예산, 여행스타일, 여행 기간 등을 입력하면 AI가 맞춤형 여행일정을 추천해 드립니다."
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,80 @@
|
|||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ibm_watsonx_ai import APIClient
|
||||||
|
from ibm_watsonx_ai import Credentials
|
||||||
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
||||||
|
import gradio as gr
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# .env 내용 가져오기
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
apikey = os.getenv("WATSONX_API_KEY")
|
||||||
|
project_id = os.getenv("WATSONX_PROJECT_ID")
|
||||||
|
watsonx_ai_url = os.getenv("WATSONX_URL")
|
||||||
|
|
||||||
|
credentials = Credentials(
|
||||||
|
url = f"{watsonx_ai_url}",
|
||||||
|
api_key = f"{apikey}",
|
||||||
|
)
|
||||||
|
client = APIClient(credentials)
|
||||||
|
|
||||||
|
model = ModelInference(
|
||||||
|
model_id="ibm/granite-4-h-small",
|
||||||
|
api_client=client,
|
||||||
|
project_id=f"{project_id}",
|
||||||
|
params = {
|
||||||
|
"max_tokens": 1000
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def recommend(message, history):
|
||||||
|
|
||||||
|
print("history :", history)
|
||||||
|
|
||||||
|
system_prompt = """
|
||||||
|
너는 여행 스캐줄러 AI
|
||||||
|
한글로 답변해주고
|
||||||
|
여행사의 여행 스케쥴 처럼 짜줘
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
user_prompt=f"""
|
||||||
|
다음 내용을 참고해서 계획 짜줘
|
||||||
|
- 내용 : {message}
|
||||||
|
"""
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
# 시스템 프롬프트
|
||||||
|
{"role" : "system", "content" : system_prompt},
|
||||||
|
# {"role" : "user", "content" : user_prompt},
|
||||||
|
]
|
||||||
|
|
||||||
|
for item in history:
|
||||||
|
content = item["content"][0]["text"]
|
||||||
|
messages.append({"role" : item["role"], "content" : content})
|
||||||
|
|
||||||
|
messages.append({"role" : "user", "content" : message})
|
||||||
|
|
||||||
|
# generated_response = model.chat(messages=messages)
|
||||||
|
# return generated_response['choices'][0]['message']['content']
|
||||||
|
|
||||||
|
# chat_stream()
|
||||||
|
generated_response = model.chat_stream(messages=messages)
|
||||||
|
|
||||||
|
full_response = ""
|
||||||
|
for chunk in generated_response:
|
||||||
|
if chunk['choices'] :
|
||||||
|
full_response += chunk["choices"][0]["delta"].get("content", "")
|
||||||
|
yield full_response
|
||||||
|
|
||||||
|
demo = gr.ChatInterface(
|
||||||
|
fn=recommend,
|
||||||
|
title="AI 여행 플래너",
|
||||||
|
description="여행지역, 예산, 여행스타일, 여행 기간 등을 입력하면 AI가 맞춤형 여행일정을 추천해 드립니다."
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
from dotenv import load_dotenv
|
||||||
|
import os
|
||||||
|
|
||||||
|
from ibm_watsonx_ai import APIClient
|
||||||
|
from ibm_watsonx_ai import Credentials
|
||||||
|
from ibm_watsonx_ai.foundation_models import ModelInference
|
||||||
|
import gradio as gr
|
||||||
|
from PIL import Image
|
||||||
|
import base64
|
||||||
|
import io
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# .env 내용 가져오기
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
apikey = os.getenv("WATSONX_API_KEY")
|
||||||
|
project_id = os.getenv("WATSONX_PROJECT_ID")
|
||||||
|
watsonx_ai_url = os.getenv("WATSONX_URL")
|
||||||
|
|
||||||
|
credentials = Credentials(
|
||||||
|
url = f"{watsonx_ai_url}",
|
||||||
|
api_key = f"{apikey}",
|
||||||
|
)
|
||||||
|
client = APIClient(credentials)
|
||||||
|
|
||||||
|
model = ModelInference(
|
||||||
|
model_id="meta-llama/llama-3-2-11b-vision-instruct",
|
||||||
|
api_client=client,
|
||||||
|
project_id=f"{project_id}",
|
||||||
|
params = {
|
||||||
|
"max_tokens": 1000
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
# 💡 복복형 이미지 변환 함수 추가
|
||||||
|
def image_to_base64(image):
|
||||||
|
buffer = io.BytesIO()
|
||||||
|
image.save(buffer, format="PNG")
|
||||||
|
return base64.b64encode(buffer.getvalue()).decode('utf-8')
|
||||||
|
|
||||||
|
|
||||||
|
def recommend(message, history):
|
||||||
|
|
||||||
|
print("history :", history)
|
||||||
|
|
||||||
|
system_prompt = """
|
||||||
|
너는 여행 스캐줄러 AI
|
||||||
|
|
||||||
|
|
||||||
|
사용자가 업로드한 이미지의
|
||||||
|
- 분위기
|
||||||
|
- 감성
|
||||||
|
- 색감
|
||||||
|
- 스타일
|
||||||
|
을 분석해서 여행지를 추천해줘
|
||||||
|
|
||||||
|
반드시
|
||||||
|
1. 이미지 분위기 분석
|
||||||
|
2. 추천 여행지
|
||||||
|
3. 추천 이유
|
||||||
|
4. 추천 활동
|
||||||
|
5. 한글로 답변
|
||||||
|
"""
|
||||||
|
|
||||||
|
user_prompt=f"""
|
||||||
|
다음 내용을 참고해서 계획 짜줘
|
||||||
|
- 내용 : {message}
|
||||||
|
"""
|
||||||
|
|
||||||
|
messages = [
|
||||||
|
# 시스템 프롬프트
|
||||||
|
{"role" : "system", "content" : system_prompt},
|
||||||
|
# {"role" : "user", "content" : user_prompt},
|
||||||
|
]
|
||||||
|
|
||||||
|
for item in history:
|
||||||
|
role = item["role"]
|
||||||
|
content = item["content"]
|
||||||
|
|
||||||
|
# assistant answer save
|
||||||
|
texts = []
|
||||||
|
|
||||||
|
if isinstance(content, list):
|
||||||
|
for c in content:
|
||||||
|
|
||||||
|
# 텍스트만 추출
|
||||||
|
if c.get("type") == "text":
|
||||||
|
texts.append(c.get("text", ""))
|
||||||
|
|
||||||
|
elif isinstance(content, str):
|
||||||
|
texts.append(content)
|
||||||
|
|
||||||
|
messages.append({"role" : role, "content" : " ".join(texts)})
|
||||||
|
|
||||||
|
# messages : text, files
|
||||||
|
text = message.get('text', '')
|
||||||
|
files = message.get('files', '')
|
||||||
|
|
||||||
|
if files:
|
||||||
|
image = Image.open(files[0])
|
||||||
|
|
||||||
|
base64_image = image_to_base64(image)
|
||||||
|
|
||||||
|
# 💡 2. 공중에 떠 있던 딕셔너리를 messages.append()로 정상 추가합니다.
|
||||||
|
messages.append({
|
||||||
|
"role" : "user",
|
||||||
|
"content" : [
|
||||||
|
{
|
||||||
|
"type": "image_url",
|
||||||
|
"image_url": {"url": f"data:image/png;base64,{base64_image}"}
|
||||||
|
},
|
||||||
|
{ "type": "text", "text": user_prompt },
|
||||||
|
],
|
||||||
|
})
|
||||||
|
|
||||||
|
else:
|
||||||
|
messages = [{"role" : "user", "content" : text}]
|
||||||
|
|
||||||
|
# generated_response = model.chat(messages=messages)
|
||||||
|
# return generated_response['choices'][0]['message']['content']
|
||||||
|
|
||||||
|
# chat_stream()
|
||||||
|
generated_response = model.chat_stream(messages=messages)
|
||||||
|
|
||||||
|
full_response = ""
|
||||||
|
for chunk in generated_response:
|
||||||
|
if chunk['choices'] :
|
||||||
|
full_response += chunk["choices"][0]["delta"].get("content", "")
|
||||||
|
yield full_response
|
||||||
|
|
||||||
|
demo = gr.ChatInterface(
|
||||||
|
fn=recommend,
|
||||||
|
multimodal=True,
|
||||||
|
title="AI 여행 플래너",
|
||||||
|
description="여행지역, 예산, 여행스타일, 여행 기간 등을 입력하면 AI가 맞춤형 여행일정을 추천해 드립니다."
|
||||||
|
)
|
||||||
|
|
||||||
|
demo.launch()
|
||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user