""" Cat Enrichment Advisor - 고양이 환경 풍부화 어드바이저 A bilingual (Korean/English) Q&A tool for cat behavioral enrichment. Built by PlayCat (https://playcat.xyz) Data source: https://huggingface.co/datasets/playcat/playcat-cat-behavior-new-data-set """ import gradio as gr # Pre-defined FAQ: research-backed answers about cat behavioral enrichment FAQ_DATA = [ { "q_ko": "고양이에게 환경 풍부화가 왜 중요한가요?", "q_en": "Why is environmental enrichment important for cats?", "a_ko": "환경 풍부화는 고양이의 자연적 본능(사냥, 탐색, 은신, 긁기 등)을 실내에서도 발현할 수 있게 해줍니다. 이는 스트레스 감소, 비만 예방, 문제 행동(부적절한 배변, 과도한 그루밍, 공격성) 예방에 핵심적 역할을 합니다. 연구에 따르면 적절한 환경 풍부화를 제공받은 실내 고양이는 코르티솔(스트레스 호르몬) 수치가 유의미하게 낮았습니다.", "a_en": "Environmental enrichment allows cats to express their natural instincts (hunting, exploring, hiding, scratching) even indoors. It plays a key role in reducing stress, preventing obesity, and avoiding problem behaviors (inappropriate elimination, excessive grooming, aggression). Research shows indoor cats provided with adequate enrichment have significantly lower cortisol (stress hormone) levels.", "category": "general" }, { "q_ko": "캣타워(캣트리)는 어떤 효과가 있나요?", "q_en": "What are the benefits of cat trees?", "a_ko": "캣타워는 고양이의 수직 공간 욕구를 충족시킵니다. 고양이는 높은 곳에서 주변을 관찰하는 것으로 안정감을 느끼며, 이는 야생에서 포식자를 감시하던 본능에 기반합니다. 다묘 가정에서는 수직 공간이 영역 분쟁을 줄이는 데 특히 효과적입니다. 최소 고양이 수 +1개의 높은 장소를 제공하는 것이 권장됩니다.", "a_en": "Cat trees fulfill cats' need for vertical space. Cats feel secure observing their surroundings from height, an instinct rooted in monitoring for predators in the wild. In multi-cat households, vertical space is particularly effective at reducing territorial disputes. Providing at least N+1 elevated spots (where N is the number of cats) is recommended.", "category": "vertical_space" }, { "q_ko": "고양이 스크래처는 어떤 것이 좋은가요?", "q_en": "What type of scratching post is best for cats?", "a_ko": "스크래처 선택 시 고려할 요소: 1) 재질 - 사이잘(sisal) 로프가 가장 선호됨, 골판지도 인기 2) 방향 - 수직형과 수평형을 모두 제공 (개체마다 선호가 다름) 3) 안정성 - 흔들리지 않아야 함 4) 높이 - 고양이가 완전히 몸을 펴고 긁을 수 있어야 함. 스크래칭은 영역 표시, 발톱 관리, 스트레칭의 기능을 동시에 수행합니다.", "a_en": "Key factors for scratching posts: 1) Material - sisal rope is most preferred, corrugated cardboard is also popular 2) Orientation - provide both vertical and horizontal options (preferences vary by individual) 3) Stability - must not wobble 4) Height - cats should be able to fully stretch while scratching. Scratching simultaneously serves territorial marking, claw maintenance, and stretching functions.", "category": "scratching" }, { "q_ko": "숨을 수 있는 공간이 왜 필요한가요?", "q_en": "Why do cats need hiding spaces?", "a_ko": "은신처는 고양이의 스트레스 관리에 필수적입니다. 새로운 환경에 적응하는 고양이에게 숨을 장소를 제공하면 적응 기간이 크게 단축됩니다. 보호소 연구에서 은신 상자를 제공받은 고양이들이 그렇지 않은 고양이들보다 스트레스 수준이 빠르게 감소했습니다. 상자, 캣터널, 캣하우스 등 다양한 형태가 가능합니다.", "a_en": "Hiding spots are essential for cat stress management. Providing hiding places for cats adapting to new environments significantly shortens the adjustment period. Shelter studies showed cats given hiding boxes had faster stress reduction than those without. Boxes, cat tunnels, and cat houses are all suitable options.", "category": "hiding" }, { "q_ko": "고양이와 어떻게 놀아주는 것이 좋은가요?", "q_en": "What's the best way to play with cats?", "a_ko": "고양이 놀이의 핵심은 '사냥 시뮬레이션'입니다. 낚싯대 장난감으로 먹잇감의 움직임을 모방하세요: 불규칙한 움직임, 숨기, 도망치기. 놀이 세션은 하루 2-3회, 각 10-15분이 이상적입니다. 놀이 끝에는 '잡기 성공'으로 마무리하고 간식을 제공하여 완전한 사냥 사이클(탐색→추적→포획→섭취)을 완성시키세요.", "a_en": "The key to cat play is 'hunt simulation.' Use wand toys to mimic prey movement: irregular motion, hiding, fleeing. Ideal play sessions are 2-3 times daily, 10-15 minutes each. End each session with a successful 'catch' followed by a treat to complete the full hunting cycle (search → stalk → capture → consume).", "category": "play" }, { "q_ko": "퍼즐 피더(급식 퍼즐)의 효과는 무엇인가요?", "q_en": "What are the benefits of puzzle feeders?", "a_ko": "퍼즐 피더는 고양이의 음식 획득 과정에 인지적 자극을 추가합니다. 야생 고양이는 하루 사냥 시간의 약 80%를 탐색과 추적에 사용합니다. 퍼즐 피더는 이 본능을 충족시켜 과식 방지, 체중 관리, 지루함 해소에 효과적입니다. 난이도를 점진적으로 높여가는 것이 중요하며, 처음에는 쉬운 것부터 시작하세요.", "a_en": "Puzzle feeders add cognitive stimulation to the food acquisition process. Wild cats spend about 80% of their hunting time on searching and stalking. Puzzle feeders fulfill this instinct, effectively preventing overeating, managing weight, and alleviating boredom. It's important to gradually increase difficulty, starting with easy puzzles first.", "category": "feeding_puzzle" }, { "q_ko": "창문 밖을 볼 수 있는 환경은 중요한가요?", "q_en": "Is window access important for indoor cats?", "a_ko": "네, 매우 중요합니다. 창문을 통한 외부 관찰은 실내 고양이에게 '고양이 TV' 역할을 합니다. 새, 다람쥐, 지나가는 사람 등을 관찰하며 시각적 자극을 받습니다. 창문 선반이나 해먹을 설치하면 더욱 효과적입니다. 단, 일부 고양이는 외부 고양이를 보면 스트레스를 받을 수 있으므로 개체별 반응을 관찰하세요.", "a_en": "Yes, very important. Window observation serves as 'cat TV' for indoor cats. They receive visual stimulation by watching birds, squirrels, and passersby. Installing window perches or hammocks enhances this. However, some cats may become stressed seeing outdoor cats, so monitor individual reactions.", "category": "observation" }, { "q_ko": "캣닙(개박하)은 안전한가요?", "q_en": "Is catnip safe for cats?", "a_ko": "네, 캣닙(개박하, Nepeta cataria)은 고양이에게 완전히 안전합니다. 캣닙에 반응하는 유전자는 약 60-70%의 고양이가 가지고 있으며, 반응이 없는 고양이도 있습니다. 효과는 보통 5-15분 지속되며 내성이 생기지 않습니다. 장난감, 스크래처에 뿌리거나 캣닙 장난감을 제공하면 좋은 환경 풍부화가 됩니다. 실버바인(마타타비)은 캣닙에 반응하지 않는 고양이에게도 효과적인 대안입니다.", "a_en": "Yes, catnip (Nepeta cataria) is completely safe for cats. About 60-70% of cats carry the gene that responds to catnip; some cats show no reaction. Effects typically last 5-15 minutes with no tolerance buildup. Sprinkling on toys or scratchers, or providing catnip toys, offers great enrichment. Silver vine (matatabi) is an effective alternative for cats unresponsive to catnip.", "category": "play" }, { "q_ko": "다묘 가정에서 환경 풍부화 시 주의할 점은?", "q_en": "What enrichment considerations are important for multi-cat households?", "a_ko": "다묘 가정의 핵심 원칙은 '자원은 고양이 수 +1' 입니다. 화장실, 급수대, 밥그릇, 높은 장소 모두 해당됩니다. 각 고양이가 다른 고양이와 마주치지 않고 자원에 접근할 수 있어야 합니다. 수직 공간을 충분히 확보하고, 시야가 차단되는 구역을 만들어 '시간 공유'(time-sharing)가 가능하게 하세요. 고양이 간 관계를 관찰하여 상성이 맞지 않는 고양이들의 자원을 분리 배치하는 것도 중요합니다.", "a_en": "The key principle for multi-cat homes is 'resources = number of cats + 1.' This applies to litter boxes, water stations, food bowls, and elevated spots. Each cat should access resources without encountering others. Provide ample vertical space and create sight-blocked zones for 'time-sharing.' Observing relationships between cats and separating resources for incompatible pairs is also important.", "category": "general" }, { "q_ko": "고양이 화장실 환경은 풍부화와 관련이 있나요?", "q_en": "Is litter box setup related to environmental enrichment?", "a_ko": "네, 화장실 환경은 고양이 복지의 기본입니다. 권장사항: 1) 개수 - 고양이 수 +1 2) 크기 - 고양이 몸길이의 1.5배 이상 3) 위치 - 조용하고 탈출 경로가 있는 곳 4) 모래 깊이 - 5cm 이상 5) 청소 - 매일 퍼내기, 주 1회 전체 교체. 부적절한 화장실 환경은 스트레스의 주요 원인이며 문제 행동으로 이어질 수 있습니다.", "a_en": "Yes, litter box setup is fundamental to cat welfare. Recommendations: 1) Number: cats + 1 2) Size: at least 1.5x the cat's body length 3) Location: quiet area with escape routes 4) Litter depth: 5cm+ 5) Cleaning: scoop daily, full change weekly. Poor litter box setup is a major stress source and can lead to behavioral problems.", "category": "general" }, { "q_ko": "고양이 풀(캣그라스)은 어떤 도움이 되나요?", "q_en": "How does cat grass benefit cats?", "a_ko": "캣그라스(보리싹, 밀싹, 귀리싹 등)는 실내 고양이에게 안전한 식물 경험을 제공합니다. 섬유질 섭취를 통한 소화 촉진, 헤어볼 배출 보조, 그리고 풀을 씹는 행동 자체가 환경 풍부화가 됩니다. 독성이 없어 안전하며, 실내에서 쉽게 재배할 수 있습니다. 유해식물을 대체하는 안전한 대안이기도 합니다.", "a_en": "Cat grass (barley, wheat, oat sprouts) provides a safe plant experience for indoor cats. It aids digestion through fiber intake, helps with hairball expulsion, and the act of chewing grass itself serves as enrichment. It's non-toxic, easy to grow indoors, and serves as a safe alternative to potentially harmful houseplants.", "category": "feeding_puzzle" }, { "q_ko": "고양이 훈련(클리커 트레이닝)은 풍부화가 되나요?", "q_en": "Can clicker training serve as enrichment for cats?", "a_ko": "클리커 트레이닝은 훌륭한 인지적 풍부화입니다. 고양이는 개만큼이나 훈련이 가능하며, '앉아', '하이파이브', '돌아' 등의 트릭을 배울 수 있습니다. 훈련 과정 자체가 정신적 자극을 제공하고, 보호자와의 유대를 강화합니다. 하루 5분 이내의 짧은 세션으로 시작하며, 양성 강화(간식, 칭찬)만 사용하세요. 처벌은 절대 사용하지 마세요.", "a_en": "Clicker training is excellent cognitive enrichment. Cats are just as trainable as dogs and can learn tricks like 'sit,' 'high five,' and 'spin.' The training process itself provides mental stimulation and strengthens the bond with caregivers. Start with short sessions under 5 minutes daily, using only positive reinforcement (treats, praise). Never use punishment.", "category": "play" }, { "q_ko": "노령 고양이를 위한 풍부화는 어떻게 다른가요?", "q_en": "How should enrichment differ for senior cats?", "a_ko": "노령 고양이(7세 이상)는 관절 건강을 고려해야 합니다: 1) 캣타워 계단/경사로 추가 2) 낮은 화장실 출입구 3) 부드러운 표면의 휴식 장소 4) 짧지만 빈번한 놀이 세션 5) 향기 풍부화(캣닙, 실버바인)로 저강도 자극 제공. 인지 기능 저하를 늦추기 위해 퍼즐 피더를 쉬운 난이도로 지속 제공하는 것이 좋습니다.", "a_en": "Senior cats (7+ years) need joint-friendly adjustments: 1) Add stairs/ramps to cat trees 2) Low-entry litter boxes 3) Soft resting surfaces 4) Short but frequent play sessions 5) Scent enrichment (catnip, silver vine) for low-intensity stimulation. Continue providing puzzle feeders at easy difficulty to help slow cognitive decline.", "category": "general" }, { "q_ko": "실내 고양이의 스트레스 징후는 무엇인가요?", "q_en": "What are signs of stress in indoor cats?", "a_ko": "풍부화 부족으로 인한 스트레스 징후: 1) 과도한 그루밍(탈모 발생) 2) 부적절한 장소에서의 배변 3) 식욕 변화(과식 또는 거식) 4) 과도한 발성 5) 공격성 증가 6) 은둔 행동 7) 과도한 수면 8) 반복적 행동(pacing). 이러한 징후가 보이면 환경 풍부화를 점검하고 수의사 상담을 권장합니다.", "a_en": "Stress signs from inadequate enrichment: 1) Excessive grooming (causing hair loss) 2) Inappropriate elimination 3) Appetite changes (overeating or anorexia) 4) Excessive vocalization 5) Increased aggression 6) Withdrawal 7) Excessive sleeping 8) Repetitive behavior (pacing). If these signs appear, review environmental enrichment and consult a veterinarian.", "category": "general" }, { "q_ko": "고양이에게 안전한 DIY 장난감은 무엇이 있나요?", "q_en": "What safe DIY toys can I make for my cat?", "a_ko": "안전한 DIY 장난감: 1) 종이 봉투(손잡이 제거) - 바스락 소리 탐색 2) 골판지 상자 미로 - 상자 연결하여 터널 제작 3) 양말 + 캣닙 - 간단한 킥커 토이 4) 화장지 심 + 간식 - 간단한 퍼즐 피더 5) 깃털 + 막대 - 낚싯대 장난감. 주의: 실, 고무줄, 작은 부품은 삼킴 위험이 있으므로 피하세요. 항상 감독 하에 사용하세요.", "a_en": "Safe DIY toys: 1) Paper bags (handles removed) - crinkle exploration 2) Cardboard box maze - connect boxes for tunnels 3) Sock + catnip - simple kicker toy 4) Toilet paper roll + treats - simple puzzle feeder 5) Feather + stick - wand toy. Caution: avoid string, rubber bands, and small parts (choking hazard). Always supervise play.", "category": "play" }, { "q_ko": "고양이에게 음악이나 소리 자극은 효과가 있나요?", "q_en": "Does auditory stimulation (music/sounds) benefit cats?", "a_ko": "연구에 따르면 고양이 전용으로 작곡된 음악(고양이의 발성 주파수와 템포에 맞춘)은 고양이의 이완을 촉진합니다. 새 소리, 자연 소리도 일부 고양이에게 흥미를 유발합니다. 일반 음악은 큰 영향이 없지만, 큰 소리나 갑작스러운 소리는 스트레스를 줄 수 있으므로 주의하세요. 고양이 전용 음악 앱이나 유튜브 채널을 활용해볼 수 있습니다.", "a_en": "Research shows music specifically composed for cats (matched to feline vocal frequency ranges and tempo) promotes relaxation. Bird sounds and nature sounds also interest some cats. Regular music has minimal impact, but loud or sudden sounds can cause stress. Consider cat-specific music apps or YouTube channels.", "category": "observation" }, { "q_ko": "고양이 벽 선반(캣워크)은 어떻게 설치하나요?", "q_en": "How should I set up cat wall shelves (catwalks)?", "a_ko": "캣워크 설치 원칙: 1) 간격 - 선반 간 30-45cm (수직), 수평 간격 45-60cm 2) 너비 - 최소 25cm (고양이가 편하게 앉을 수 있는 폭) 3) 하중 - 고양이 체중의 3배 이상 지지 4) 동선 - 순환형 코스 제공(막다른 길 최소화) 5) 미끄럼 방지 - 카펫이나 코르크 부착. 벽면을 활용한 수직 공간은 바닥 면적을 차지하지 않으면서 고양이의 영역을 크게 확장합니다.", "a_en": "Catwalk installation principles: 1) Spacing: 30-45cm vertical, 45-60cm horizontal between shelves 2) Width: minimum 25cm 3) Weight capacity: support 3x the cat's weight 4) Route: provide circular paths (minimize dead ends) 5) Anti-slip: attach carpet or cork. Wall-mounted vertical spaces significantly expand territory without taking floor space.", "category": "vertical_space" }, { "q_ko": "고양이와 함께하는 산책(하네스 훈련)은 풍부화가 되나요?", "q_en": "Can harness walking serve as enrichment for cats?", "a_ko": "하네스 산책은 실내 고양이에게 훌륭한 풍부화가 될 수 있지만, 모든 고양이에게 적합하지는 않습니다. 장점: 새로운 냄새, 소리, 시각 자극. 성공 팁: 1) 어릴 때부터 점진적으로 시작 2) 집 안에서 하네스 적응 먼저 3) 조용한 환경부터 시작 4) 고양이가 주도하게 하기 5) 탈출 방지 하네스(H형) 사용. 두려워하는 고양이에게 강요하지 마세요.", "a_en": "Harness walking can be excellent enrichment for indoor cats, but isn't suitable for all. Benefits: new smells, sounds, visual stimulation. Tips: 1) Start gradually from a young age 2) First adapt to the harness indoors 3) Begin in quiet environments 4) Let the cat lead 5) Use escape-proof (H-type) harnesses. Never force a fearful cat.", "category": "play" }, { "q_ko": "계절별로 환경 풍부화를 바꿔줘야 하나요?", "q_en": "Should enrichment change with the seasons?", "a_ko": "계절에 따른 풍부화 조정이 도움이 됩니다: 봄/여름 - 창문 열기(방충망 필수), 캣그라스 재배, 햇볕 쬐기 공간 확보. 가을/겨울 - 따뜻한 은신처 제공, 온열 패드, 실내 놀이 시간 증가. 장난감도 정기적으로 교체(로테이션)하면 새로움을 유지할 수 있습니다. 2-3주마다 장난감 세트를 바꿔주면 효과적입니다.", "a_en": "Seasonal enrichment adjustments help: Spring/Summer - open windows (screen required), grow cat grass, provide sunbathing spots. Fall/Winter - warm hiding spots, heating pads, increase indoor play time. Rotating toys regularly maintains novelty. Swapping toy sets every 2-3 weeks is effective.", "category": "general" }, { "q_ko": "PlayCat의 고양이 행동 데이터셋은 어떻게 활용할 수 있나요?", "q_en": "How can I use PlayCat's cat behavior dataset?", "a_ko": "PlayCat의 고양이 행동 데이터셋(12,262개 레코드)은 HuggingFace에서 무료로 접근 가능합니다. 이 데이터셋은 고양이 행동 분석, 환경 풍부화 연구, 반려동물 케어 AI 모델 학습 등에 활용할 수 있습니다. 데이터셋: https://huggingface.co/datasets/playcat/playcat-cat-behavior-new-data-set 더 많은 고양이 케어 정보는 PlayCat 웹사이트(https://playcat.xyz)에서 확인하세요.", "a_en": "PlayCat's cat behavior dataset (12,262 records) is freely accessible on HuggingFace. It can be used for cat behavior analysis, environmental enrichment research, and pet care AI model training. Dataset: https://huggingface.co/datasets/playcat/playcat-cat-behavior-new-data-set Visit PlayCat (https://playcat.xyz) for more cat care information.", "category": "general" }, ] def search_faq(query, language): """Search FAQ entries and return relevant answers.""" if not query.strip(): if language == "한국어 (Korean)": return "질문을 입력해주세요! 고양이 환경 풍부화에 대해 무엇이든 물어보세요." else: return "Please enter a question! Ask anything about cat environmental enrichment." query_lower = query.lower() is_korean = language == "한국어 (Korean)" # Score each FAQ entry by keyword matching scored = [] for faq in FAQ_DATA: q_field = faq["q_ko"] if is_korean else faq["q_en"] a_field = faq["a_ko"] if is_korean else faq["a_en"] combined = (q_field + " " + a_field).lower() # Simple keyword matching words = query_lower.split() score = sum(1 for w in words if w in combined) # Boost for exact phrase match if query_lower in combined: score += 5 if score > 0: scored.append((score, q_field, a_field)) scored.sort(key=lambda x: -x[0]) if not scored: if is_korean: return ("관련 답변을 찾지 못했습니다. 다른 키워드로 검색해보세요.\n\n" "검색 가능한 주제: 캣타워, 스크래처, 숨기, 놀이, 퍼즐 피더, " "창문, 캣닙, 다묘, 화장실, 노령 고양이, 스트레스, DIY, 음악, " "캣워크, 하네스, 계절, 클리커 훈련, 캣그라스 등\n\n" "더 많은 정보: https://playcat.xyz") else: return ("No matching answer found. Try different keywords.\n\n" "Searchable topics: cat tree, scratching, hiding, play, puzzle feeder, " "window, catnip, multi-cat, litter box, senior cats, stress, DIY, music, " "catwalk, harness, seasonal, clicker training, cat grass, etc.\n\n" "More info: https://playcat.xyz") # Return top 3 results results = [] for i, (score, q, a) in enumerate(scored[:3]): prefix = f"**Q{i+1}: {q}**\n\n" if len(scored) > 1 else f"**{q}**\n\n" results.append(prefix + a) separator = "\n\n---\n\n" response = separator.join(results) if is_korean: response += ("\n\n---\n*PlayCat 고양이 행동 데이터셋 기반 | " "[웹사이트](https://playcat.xyz) | " "[데이터셋](https://huggingface.co/datasets/playcat/playcat-cat-behavior-new-data-set)*") else: response += ("\n\n---\n*Based on PlayCat Cat Behavior Dataset | " "[Website](https://playcat.xyz) | " "[Dataset](https://huggingface.co/datasets/playcat/playcat-cat-behavior-new-data-set)*") return response def list_all_topics(language): """List all available topics.""" is_korean = language == "한국어 (Korean)" topics = [] for i, faq in enumerate(FAQ_DATA, 1): q = faq["q_ko"] if is_korean else faq["q_en"] topics.append(f"{i}. {q}") header = "## 전체 질문 목록\n\n" if is_korean else "## All Available Questions\n\n" return header + "\n".join(topics) # Build the Gradio interface with gr.Blocks( title="Cat Enrichment Advisor | 고양이 환경 풍부화 어드바이저", theme=gr.themes.Soft(primary_hue="orange", secondary_hue="yellow"), ) as demo: gr.Markdown(""" # 🐱 Cat Enrichment Advisor | 고양이 환경 풍부화 어드바이저 Research-backed answers about cat environmental enrichment. 고양이 환경 풍부화에 대한 연구 기반 답변을 제공합니다. **By [PlayCat](https://playcat.xyz)** | Data: [Cat Behavior Dataset (12,262 records)](https://huggingface.co/datasets/playcat/playcat-cat-behavior-new-data-set) """) with gr.Row(): with gr.Column(scale=3): language = gr.Radio( choices=["한국어 (Korean)", "English"], value="한국어 (Korean)", label="Language / 언어", ) query = gr.Textbox( label="Ask about cat enrichment / 고양이 풍부화에 대해 질문하세요", placeholder="예: 캣타워, 퍼즐 피더, 놀이 방법... / e.g., cat tree, puzzle feeder, play...", lines=2, ) with gr.Row(): search_btn = gr.Button("🔍 Search / 검색", variant="primary") topics_btn = gr.Button("📋 All Topics / 전체 목록") with gr.Column(scale=4): output = gr.Markdown( label="Answer / 답변", value="질문을 입력하고 검색 버튼을 눌러주세요!\nEnter a question and click Search!", ) # Example queries gr.Examples( examples=[ ["캣타워는 어떤 효과가 있나요?", "한국어 (Korean)"], ["고양이와 어떻게 놀아주나요?", "한국어 (Korean)"], ["퍼즐 피더", "한국어 (Korean)"], ["What type of scratching post is best?", "English"], ["How to play with cats?", "English"], ["senior cat enrichment", "English"], ], inputs=[query, language], ) search_btn.click(fn=search_faq, inputs=[query, language], outputs=output) query.submit(fn=search_faq, inputs=[query, language], outputs=output) topics_btn.click(fn=list_all_topics, inputs=[language], outputs=output) gr.Markdown(""" --- ### About PlayCat PlayCat is dedicated to improving feline welfare through data-driven insights and environmental enrichment research. - 🌐 Website: [playcat.xyz](https://playcat.xyz) - 📊 Dataset: [Cat Behavior Dataset](https://huggingface.co/datasets/playcat/playcat-cat-behavior-new-data-set) - 🔬 Enrichment Methods: [Cat Enrichment Methods](https://huggingface.co/datasets/playcat/cat-enrichment-methods) - 💻 GitHub: [playcatkorea](https://github.com/playcatkorea/cat-behavior-enrichment) *This tool provides general educational information. Always consult a veterinarian for specific health concerns.* """) if __name__ == "__main__": demo.launch()