Answers a health complaint in Turkish, tailored to the person. FastAPI · LangChain · Gemini 2.5 Flash, with emergency detection and session memory.
HealthPython · TypeScriptGitHub @333asli333OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
🩺 AI Doktor Asistanı / AI Doctor Assistant 🟢 Canlı uygulama / Live app · 👩💻 Portfolyo / Portfolio Proje Hakkında Kullanıcının adını, yaşını ve sağlık şikayetini alarak kişiselleştirilmiş Türkçe sağlık bilgisi sunan, hafızalı bir AI doktor asistanı. OpenRouter üzerinden çalışan Google Gemini modeli, LangChain ile yönetilen konuşma hafızası ve FastAPI tabanlı bir servis ile geliştirilmiştir. ⚠️ Bu uygulama tıbbi teşhis koymaz. Sağlık sorunlarınız için mutlaka bir doktora danışınız.Read the full README ↗
🟢 Canlı uygulama / Live app · 👩💻 Portfolyo / Portfolio
Kullanıcının adını, yaşını ve sağlık şikayetini alarak kişiselleştirilmiş Türkçe sağlık bilgisi sunan, hafızalı bir AI doktor asistanı. OpenRouter üzerinden çalışan Google Gemini modeli, LangChain ile yönetilen konuşma hafızası ve FastAPI tabanlı bir servis ile geliştirilmiştir.
⚠️ Bu uygulama tıbbi teşhis koymaz. Sağlık sorunlarınız için mutlaka bir doktora danışınız.
Soldan sağa: giriş formu · kişiye özel yanıt · acil belirtide tek cümlelik yönlendirme
Birbirine bağımlı olmayan iki servis. SSL'i sunucudaki ters vekil bitirir.
| Parça | Yol | Alan adı | Host portu |
|---|---|---|---|
| Backend — FastAPI + LangChain | backend/ | doctor-assistant-api.aisli.dev | 8003 |
| Frontend — React + Vite + nginx | frontend/ | doctor-assistant.aisli.dev | 8002 |
Frontend nginx'i yalnız statik dosya servis eder, backend'e bağlanmaz. Tarayıcı API'ye VITE_API_BASE adresinden doğrudan gider; bu adres derlemeye gömülür, değişirse imaj yeniden derlenmelidir. Backend de FRONTEND_URL ile yalnız frontend'in origin'ine CORS izni verir.
ai-doctor/
├── backend/
│ ├── llm.py # model, prompt, zincir, hafıza
│ ├── api.py # FastAPI (yalnız JSON)
│ ├── terminal.py # terminal sürümü
│ ├── tests/ # birim testleri (pytest, sahte model)
│ ├── smoke_test.py # davranış doğrulaması
│ ├── Dockerfile · docker-compose.yml · Makefile
│ └── .env.example
└── frontend/
├── src/ # React + TypeScript
├── Dockerfile · nginx.conf · docker-compose.yml · Makefile
└── .env.example
Backend
cd backend
cp .env.example .env # OPENROUTER_API_KEY değerini doldurun
make up # derle ve başlat
make health # {"status":"ok", ...}
Frontend
cd frontend
VITE_API_BASE=http://localhost:8003 make up # yerel backend'e bağlan
Tarayıcıda http://localhost:8002 adresini açın.
Docker olmadan, iki terminalde:
cd backend && make dev # uvicorn :8000, canlı yeniden yükleme
cd frontend && make dev # vite :5173, /chat isteklerini :8000'e proxy'ler (yalnız dev)
Terminal sürümü için: cd backend && make terminal
cd backend && pytest # birim testleri (API anahtarı ve ağ gerekmez)
cd backend && make test # gerçek API'ye karşı davranış testi
cd frontend && make typecheck # TypeScript denetimi
pytest modeli sahte bir modelle değiştirir; HTTP katmanını (doğrulama, 503 hata yönetimi), oturum hafızasını ve sistem promptundaki güvenlik kurallarını kontrol eder ve her push'ta GitHub Actions'ta çalışır.
make test OpenRouter'a gerçek istek atar ve kredi harcar. Kontrol ettikleri:
Model çıktısı deterministik olmadığından tek bir başarısızlık gürültü olabilir; tekrarlıyorsa gerçek bir gerilemedir.
Varsayılan google/gemini-2.5-flash (~0.30$/1M token). OpenRouter'da ücretsiz Gemini kalmadı; daha ucuzu google/gemini-2.5-flash-lite (~0.10$) ama yönergeleri daha zayıf takip ediyor. Model OPENROUTER_MODEL ile değiştirilir.
max_tokens 800'e sabitlenmiştir: verilmezse OpenRouter modelin tavanını (65k) varsayıp bakiyeyi ona göre kontrol eder ve düşük bakiyede 402 döner.
Sunucu Dokploy ile yönetilir, SSL'i ters vekil bitirir. Sunucuda elle nginx ayarı yapılmaz, certbot çalıştırılmaz.
doctor-assistant ve doctor-assistant-api için A kaydı → sunucu IP'si./backend, Environment'a OPENROUTER_API_KEY ve FRONTEND_URL=https://doctor-assistant.aisli.dev. Domain doctor-assistant-api.aisli.dev, Container Port 8000./frontend, Domain doctor-assistant.aisli.dev, Container Port 80.Frontend varsayılan olarak https://doctor-assistant-api.aisli.dev adresine derlenir. Farklı bir API adresi gerekirse Build Args'a VITE_API_BASE girilip yeniden deploy edilir.
A conversational AI health assistant that collects the user's name, age, and health complaint to provide personalized Turkish-language health information. Built with Google Gemini via OpenRouter, LangChain conversation memory, a FastAPI backend, and a React + Vite frontend served by nginx.
⚠️ This application does not provide medical diagnoses. Always consult a doctor for health concerns.
Left to right: intake form · personalised reply · one-sentence referral on an emergency symptom
| Layer | Technology |
|---|---|
| LLM | Google Gemini (OpenRouter) |
| LLM Management | LangChain |
| Backend | FastAPI + Uvicorn |
| Frontend | React + Vite + TypeScript (bun) |
| Web server | nginx (static only) |
| Deployment | Docker + Dokploy (self-hosted) |
cd backend && cp .env.example .env && make up
cd ../frontend && VITE_API_BASE=http://localhost:8003 make up
Open http://localhost:8002.
Run make help in either folder to see all targets.
Sohbet hafızası süreç belleğinde (store sözlüğü) tutulur: konteyner yeniden başlatıldığında tüm konuşmalar silinir ve backend tek worker ile çalışmak zorundadır. Kalıcılık gerekirse bir veritabanı katmanı eklenmelidir.
Built by Aslı