init project
This commit is contained in:
@@ -0,0 +1,18 @@
|
|||||||
|
{"id":"34247001-e643-44e1-b961-a0f035191aeb","timestamp":"2026-04-23T07:10:11.884Z","sessionId":"","actor":"system","actorId":"unified-bash-post","action":"command_executed","category":"control","target":"find C:/workspace_python/youlbot -type f | head -80","targetType":"feature","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"3fd3ea98-777d-488b-a422-68db5d344cc7","timestamp":"2026-04-23T07:10:35.921Z","sessionId":"","actor":"hook","actorId":"pre-write","action":"file_modified","category":"file","target":"C:\\workspace_python\\youlbot\\CLAUDE.md","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"e2da7865-24c1-4b6f-9988-d08ce233fdc6","timestamp":"2026-04-23T07:10:42.076Z","sessionId":"","actor":"system","actorId":"notification-handler","action":"phase_transition","category":"control","target":"permission_prompt","targetType":"feature","details":{"event":"notification","notificationType":"permission_prompt","title":"","message":"Claude needs your permission to use Write"},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"fe81c041-0a2f-48a8-8bfd-e103f6e0c9e7","timestamp":"2026-04-23T07:11:49.340Z","sessionId":"","actor":"system","actorId":"unified-write-post","action":"file_modified","category":"file","target":"C:\\workspace_python\\youlbot\\CLAUDE.md","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"491dd54d-1165-4133-ba3d-f32205f54c5e","timestamp":"2026-04-23T07:16:32.546Z","sessionId":"","actor":"system","actorId":"unified-bash-post","action":"command_executed","category":"control","target":"ls -la \"C:/workspace_python/youlbot\" 2>/dev/null | head -20","targetType":"feature","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"e434a175-dcac-43f2-8bd0-6084a142c4fa","timestamp":"2026-04-23T07:17:00.593Z","sessionId":"","actor":"hook","actorId":"pre-write","action":"file_modified","category":"file","target":"C:\\Users\\SAL\\.claude\\plans\\m4-tingly-pebble.md","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"b801c1c6-9ef0-4e59-a238-847b19a07c4b","timestamp":"2026-04-23T07:17:00.703Z","sessionId":"","actor":"system","actorId":"unified-write-post","action":"file_modified","category":"file","target":"C:\\Users\\SAL\\.claude\\plans\\m4-tingly-pebble.md","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"38d58fdb-a6fa-47cb-8011-96d3923e3c47","timestamp":"2026-04-23T07:17:25.704Z","sessionId":"","actor":"system","actorId":"notification-handler","action":"phase_transition","category":"control","target":"permission_prompt","targetType":"feature","details":{"event":"notification","notificationType":"permission_prompt","title":"","message":"Claude Code needs your approval for the plan"},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"577d8ae4-a0f7-4793-87d5-1534f983c039","timestamp":"2026-04-23T07:19:51.600Z","sessionId":"","actor":"hook","actorId":"pre-write","action":"file_modified","category":"file","target":"C:\\workspace_python\\youlbot\\requirements.txt","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"eeeb27f5-8689-4af0-8c5c-238791453f1e","timestamp":"2026-04-23T07:19:51.718Z","sessionId":"","actor":"system","actorId":"unified-write-post","action":"file_modified","category":"file","target":"C:\\workspace_python\\youlbot\\requirements.txt","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"a0474f25-37e6-44ed-88c1-f8a49a7117b8","timestamp":"2026-04-23T07:20:07.341Z","sessionId":"","actor":"hook","actorId":"pre-write","action":"file_modified","category":"file","target":"C:\\workspace_python\\youlbot\\chat.py","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"63d6c73f-7473-4e0a-8e78-e5cf9babc050","timestamp":"2026-04-23T07:20:07.466Z","sessionId":"","actor":"system","actorId":"unified-write-post","action":"file_modified","category":"file","target":"C:\\workspace_python\\youlbot\\chat.py","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"41ce3a92-cf8d-4516-9bc3-1ea5325ef6e4","timestamp":"2026-04-23T07:21:19.294Z","sessionId":"","actor":"system","actorId":"notification-handler","action":"phase_transition","category":"control","target":"idle_prompt","targetType":"feature","details":{"event":"notification","notificationType":"idle_prompt","title":"","message":"Claude is waiting for your input"},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"4cc20db5-e4f1-43ae-8872-27765ea000b2","timestamp":"2026-04-23T08:48:31.894Z","sessionId":"","actor":"system","actorId":"notification-handler","action":"phase_transition","category":"control","target":"idle_prompt","targetType":"feature","details":{"event":"notification","notificationType":"idle_prompt","title":"","message":"Claude is waiting for your input"},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"d254be8a-117c-459a-8d55-92e8ed6c222d","timestamp":"2026-04-23T08:50:58.123Z","sessionId":"","actor":"hook","actorId":"pre-write","action":"file_modified","category":"file","target":"C:\\workspace_python\\youlbot\\docs\\jetbrains-gateway-setup.md","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"63b6c3c8-84a1-4426-887b-19c643278c25","timestamp":"2026-04-23T08:51:01.358Z","sessionId":"","actor":"system","actorId":"unified-write-post","action":"file_modified","category":"file","target":"C:\\workspace_python\\youlbot\\docs\\jetbrains-gateway-setup.md","targetType":"file","details":{},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"7ac0cacc-20cd-4c35-883d-d87474ce6b45","timestamp":"2026-04-23T08:52:03.254Z","sessionId":"","actor":"system","actorId":"notification-handler","action":"phase_transition","category":"control","target":"idle_prompt","targetType":"feature","details":{"event":"notification","notificationType":"idle_prompt","title":"","message":"Claude is waiting for your input"},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
|
{"id":"0522fd93-2cea-4989-91ec-5d55140060b2","timestamp":"2026-04-23T08:56:06.983Z","sessionId":"","actor":"hook","actorId":"session-end-handler","action":"phase_transition","category":"control","target":"447cbd58-776c-45d1-bb67-4864a4449066","targetType":"feature","details":{"event":"session_end","reason":"prompt_input_exit"},"result":"success","reason":null,"destructiveOperation":false,"blastRadius":null,"bkitVersion":"2.1.7"}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"version": "1.0",
|
||||||
|
"enabled": false,
|
||||||
|
"teamName": "",
|
||||||
|
"feature": "",
|
||||||
|
"pdcaPhase": "plan",
|
||||||
|
"orchestrationPattern": "leader",
|
||||||
|
"ctoAgent": "opus",
|
||||||
|
"startedAt": "2026-04-23T07:16:29.093Z",
|
||||||
|
"lastUpdated": "2026-04-23T07:20:19.184Z",
|
||||||
|
"teammates": [],
|
||||||
|
"progress": {
|
||||||
|
"totalTasks": 0,
|
||||||
|
"completedTasks": 0,
|
||||||
|
"inProgressTasks": 0,
|
||||||
|
"failedTasks": 0,
|
||||||
|
"pendingTasks": 0
|
||||||
|
},
|
||||||
|
"recentMessages": [],
|
||||||
|
"sessionId": "447cbd58-776c-45d1-bb67-4864a4449066"
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"version": "3.0",
|
||||||
|
"lastUpdated": "2026-04-23T07:09:59.804Z",
|
||||||
|
"activeFeatures": [],
|
||||||
|
"primaryFeature": null,
|
||||||
|
"features": {},
|
||||||
|
"pipeline": {
|
||||||
|
"currentPhase": 1,
|
||||||
|
"level": "Dynamic",
|
||||||
|
"phaseHistory": []
|
||||||
|
},
|
||||||
|
"session": {
|
||||||
|
"startedAt": "2026-04-23T07:09:59.583Z",
|
||||||
|
"onboardingCompleted": false,
|
||||||
|
"lastActivity": "2026-04-23T07:09:59.804Z"
|
||||||
|
},
|
||||||
|
"history": [],
|
||||||
|
"stateMachine": {
|
||||||
|
"defaultWorkflow": "default",
|
||||||
|
"activeWorkflows": {},
|
||||||
|
"totalTransitions": 0
|
||||||
|
},
|
||||||
|
"automation": {
|
||||||
|
"globalLevel": 2,
|
||||||
|
"trustScore": 40,
|
||||||
|
"pendingApprovals": 0,
|
||||||
|
"lastGateResult": null
|
||||||
|
},
|
||||||
|
"team": {
|
||||||
|
"enabled": true,
|
||||||
|
"stateFile": ".bkit/runtime/agent-state.json",
|
||||||
|
"eventsFile": ".bkit/runtime/agent-events.jsonl"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"sessionId": "447cbd58-776c-45d1-bb67-4864a4449066",
|
||||||
|
"reason": "prompt_input_exit",
|
||||||
|
"endedAt": "2026-04-23T08:56:06.977Z",
|
||||||
|
"feature": null,
|
||||||
|
"phase": null,
|
||||||
|
"progress": null
|
||||||
|
}
|
||||||
|
]
|
||||||
Generated
+10
@@ -0,0 +1,10 @@
|
|||||||
|
# Default ignored files
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# Editor-based HTTP Client requests
|
||||||
|
/httpRequests/
|
||||||
|
# Ignored default folder with query files
|
||||||
|
/queries/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="py_ai" project-jdk-type="Python SDK">
|
||||||
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+8
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/youlbot.iml" filepath="$PROJECT_DIR$/youlbot.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
Generated
+6
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
# CLAUDE.md
|
||||||
|
|
||||||
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||||
|
|
||||||
|
## Project Overview
|
||||||
|
|
||||||
|
**youlbot** — Python 프로젝트 (초기 단계). IntelliJ IDEA로 관리되며, `py_ai`라는 이름의 Python 가상 환경을 사용한다.
|
||||||
|
|
||||||
|
## Environment
|
||||||
|
|
||||||
|
- **Python SDK**: `py_ai` (IntelliJ에 등록된 가상 환경)
|
||||||
|
- **IDE**: IntelliJ IDEA (`.idea/` 구성 포함)
|
||||||
|
- **PDCA 도구**: bkit (`.bkit/` 디렉터리, Dynamic 레벨)
|
||||||
|
|
||||||
|
## Development Workflow
|
||||||
|
|
||||||
|
이 프로젝트는 bkit PDCA 방법론을 사용한다. 새 기능 작업 전에 Plan/Design 문서를 먼저 확인하고, 구현 후에는 Gap 분석을 수행한다.
|
||||||
|
|
||||||
|
```
|
||||||
|
/pdca # PDCA 사이클 관리 (plan → design → do → check → act)
|
||||||
|
/btw # 작업 중 개선 제안 수집
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
|
|
||||||
|
- 소스 코드가 아직 없는 프로젝트 초기 단계이므로, 첫 코드 작성 시 이 파일을 업데이트할 것
|
||||||
|
- `py_ai` 가상 환경 경로는 로컬 IntelliJ 설정에 따라 다를 수 있음
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
from mlx_lm import load, stream_generate
|
||||||
|
|
||||||
|
MODEL_ID = "mlx-community/Qwen2.5-7B-Instruct-4bit"
|
||||||
|
MAX_TOKENS = 1024
|
||||||
|
MAX_HISTORY_TURNS = 10 # 최근 10턴만 유지해 메모리 절약
|
||||||
|
|
||||||
|
SYSTEM_PROMPT = """당신은 친절하고 따뜻한 한국어 상담 도우미입니다.
|
||||||
|
육아와 금융 두 분야를 전문으로 합니다.
|
||||||
|
|
||||||
|
- 육아: 아이 발달, 이유식, 수면, 훈육, 교육 등 부모가 궁금해하는 모든 것을 도와드립니다.
|
||||||
|
- 금융: 저축, 투자, 보험, 대출, 세금 등 생활 금융 관련 질문에 답변드립니다.
|
||||||
|
|
||||||
|
항상 쉽고 친근한 말투로 설명하고, 전문 용어는 풀어서 설명합니다.
|
||||||
|
의학적 진단이나 법적 판단이 필요한 경우에는 반드시 전문가 상담을 권유합니다."""
|
||||||
|
|
||||||
|
|
||||||
|
def format_prompt(tokenizer, history: list[dict]) -> str:
|
||||||
|
return tokenizer.apply_chat_template(
|
||||||
|
history,
|
||||||
|
tokenize=False,
|
||||||
|
add_generation_prompt=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def trim_history(history: list[dict], max_turns: int) -> list[dict]:
|
||||||
|
system_msgs = [m for m in history if m["role"] == "system"]
|
||||||
|
turn_msgs = [m for m in history if m["role"] != "system"]
|
||||||
|
if len(turn_msgs) > max_turns * 2:
|
||||||
|
turn_msgs = turn_msgs[-(max_turns * 2):]
|
||||||
|
return system_msgs + turn_msgs
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
print(f"모델 로딩 중: {MODEL_ID}")
|
||||||
|
print("(첫 실행 시 HuggingFace에서 자동 다운로드됩니다. 약 4.5GB)\n")
|
||||||
|
|
||||||
|
model, tokenizer = load(MODEL_ID)
|
||||||
|
|
||||||
|
print("=" * 50)
|
||||||
|
print("육아 & 금융 상담 챗봇 시작!")
|
||||||
|
print("종료: '종료' / 'quit' / 'exit' 입력")
|
||||||
|
print("=" * 50 + "\n")
|
||||||
|
|
||||||
|
history = [{"role": "system", "content": SYSTEM_PROMPT}]
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
user_input = input("나: ").strip()
|
||||||
|
except (EOFError, KeyboardInterrupt):
|
||||||
|
print("\n대화를 종료합니다.")
|
||||||
|
break
|
||||||
|
|
||||||
|
if not user_input:
|
||||||
|
continue
|
||||||
|
|
||||||
|
if user_input.lower() in ("종료", "quit", "exit"):
|
||||||
|
print("대화를 종료합니다.")
|
||||||
|
break
|
||||||
|
|
||||||
|
history.append({"role": "user", "content": user_input})
|
||||||
|
history = trim_history(history, MAX_HISTORY_TURNS)
|
||||||
|
|
||||||
|
prompt = format_prompt(tokenizer, history)
|
||||||
|
|
||||||
|
print("\n도우미: ", end="", flush=True)
|
||||||
|
response_text = ""
|
||||||
|
|
||||||
|
for chunk in stream_generate(model, tokenizer, prompt=prompt, max_tokens=MAX_TOKENS):
|
||||||
|
print(chunk.text, end="", flush=True)
|
||||||
|
response_text += chunk.text
|
||||||
|
|
||||||
|
print("\n")
|
||||||
|
history.append({"role": "assistant", "content": response_text})
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
# JetBrains Gateway 원격 개발 환경 설정
|
||||||
|
|
||||||
|
> Windows PC에서 편집 → Mac Mini M4에서 실행하는 환경 구축 가이드
|
||||||
|
|
||||||
|
```
|
||||||
|
Windows PC Mac Mini M4
|
||||||
|
┌─────────────────┐ ┌─────────────────────┐
|
||||||
|
│ JetBrains │ SSH 연결 │ PyCharm 백엔드 │
|
||||||
|
│ Gateway │ ─────────▶│ ~/youlbot/chat.py │
|
||||||
|
│ (얇은 클라이언트) │ │ mlx-lm + M4 GPU │
|
||||||
|
└─────────────────┘ └─────────────────────┘
|
||||||
|
Windows에서 편집 Mac에서 실행
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1단계: Mac에서 SSH 활성화
|
||||||
|
|
||||||
|
Mac Mini에서 아래 경로로 이동해 **원격 로그인**을 켭니다.
|
||||||
|
|
||||||
|
```
|
||||||
|
시스템 설정 → 일반 → 공유 → 원격 로그인 ON
|
||||||
|
```
|
||||||
|
|
||||||
|
활성화 후 화면에 표시되는 `사용자명@IP주소`를 메모해 둡니다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2단계: 프로젝트를 Mac으로 전송 (Git)
|
||||||
|
|
||||||
|
### Windows에서 (PowerShell)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd C:/workspace_python/youlbot
|
||||||
|
git add .
|
||||||
|
git commit -m "init: chat.py 초기 코드"
|
||||||
|
git remote add origin https://github.com/본인계정/youlbot.git
|
||||||
|
git push -u origin master
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mac 터미널에서
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~
|
||||||
|
git clone https://github.com/본인계정/youlbot.git
|
||||||
|
cd youlbot
|
||||||
|
python -m venv py_ai
|
||||||
|
source py_ai/bin/activate
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3단계: JetBrains Gateway 설치 (Windows)
|
||||||
|
|
||||||
|
아래 공식 사이트에서 다운로드 후 설치합니다.
|
||||||
|
|
||||||
|
```
|
||||||
|
https://www.jetbrains.com/remote-development/gateway/
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4단계: Gateway에서 Mac 연결
|
||||||
|
|
||||||
|
1. Gateway 실행
|
||||||
|
2. **New Connection** → **SSH** 선택
|
||||||
|
3. 아래 정보 입력
|
||||||
|
|
||||||
|
| 항목 | 값 |
|
||||||
|
|------|-----|
|
||||||
|
| Host | Mac의 IP 주소 |
|
||||||
|
| Username | Mac 사용자명 |
|
||||||
|
| Authentication | Password 또는 SSH Key |
|
||||||
|
|
||||||
|
4. **Check Connection** 클릭해 연결 확인
|
||||||
|
5. IDE 선택: **PyCharm** → 버전 선택 → **Download and Start IDE**
|
||||||
|
- Mac에 PyCharm 백엔드가 자동 설치됩니다 (최초 1회, 수분 소요)
|
||||||
|
6. 프로젝트 경로 입력: `~/youlbot` → 열기
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5단계: Python 인터프리터 설정
|
||||||
|
|
||||||
|
PyCharm이 열리면 아래 경로에서 인터프리터를 연결합니다.
|
||||||
|
|
||||||
|
```
|
||||||
|
Settings → Project → Python Interpreter
|
||||||
|
→ Add Interpreter → Add Local Interpreter
|
||||||
|
→ ~/youlbot/py_ai 가상환경 선택
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6단계: 실행 확인
|
||||||
|
|
||||||
|
PyCharm 터미널에서 아래 명령어로 챗봇을 실행합니다.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
source py_ai/bin/activate
|
||||||
|
python chat.py
|
||||||
|
```
|
||||||
|
|
||||||
|
첫 실행 시 HuggingFace에서 모델(약 4.5GB)이 자동 다운로드됩니다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 이후 개발 흐름
|
||||||
|
|
||||||
|
```
|
||||||
|
1. Windows Gateway에서 코드 수정
|
||||||
|
2. Mac PyCharm 터미널에서 python chat.py 실행
|
||||||
|
3. 변경사항은 git push/pull로 동기화
|
||||||
|
```
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
mlx-lm>=0.19.0
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="PYTHON_MODULE" version="4">
|
||||||
|
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
||||||
|
<exclude-output />
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="jdk" jdkName="py_ai" jdkType="Python SDK" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
||||||
Reference in New Issue
Block a user